Spring configuration metadata

I set two data sources, as shown here, at http://docs.spring.io/spring-boot/docs/1.3.0.M2/reference/htmlsingle/#howto-two-datasources using spring boot, but with In this mine application.propertiesshows warnings, which, for example, x.x.usernameare an unknown property. To some extent this is true since it javax.sql.DataSourcedoes not contain a URL, username, password, etc., but implementation classes. I have an annotation processor installed, and it works great when working with specific classes.

I notice that it org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfigurationuses both DataSourcePropertiesand has @ConfigurationPropertiesannotated on dataSource(). This will probably save me from my warnings, but what is the point of this. Doesn't he set properties twice that way?

Config:

@Bean
@Primary
@ConfigurationProperties(prefix="datasource.primary")
public DataSource primaryDataSource() {
    return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix="datasource.secondary")
public DataSource secondaryDataSource() {
    return DataSourceBuilder.create().build();
}

Properties with warnings:

datasource.primary.url=jdbc:...
datasource.primary.username=user
datasource.primary.password=password

datasource.secondary.url=jdbc:...
datasource.secondary.username=user
datasource.secondary.password=password
+4
source share
1 answer

- +1 , , . , , @ConfigurationProperties DataSource , DataSourceProperties, DataSource, , Spring org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration. , , DataSource , , , DataSourceProperties, "Spring Boot application.properties editor" .

, DataSourceBuilder Tomcat, HikariCP Commons DBCP , Classpath DataSource, - dataSourceBuilder.type(Class<? extends DataSource>)

:

datasource.primary.url=jdbc:...
datasource.primary.username=user
datasource.primary.password=password

datasource.secondary.url=jdbc:...
datasource.secondary.username=user
datasource.secondary.password=password

Java:

@Bean
@Primary
@ConfigurationProperties(prefix = "datasource.primary")
public DataSourceProperties primaryProps() {
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties(prefix = "datasource.secondary")
public DataSourceProperties secondaryProps() {
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties(prefix = "datasource.primary")
public DataSource secondaryDataSource() {
    DataSourceProperties props = secondaryProps();
    return DataSourceBuilder.create(props.getClassLoader())
            .driverClassName(props.getDriverClassName())
            .url(props.getUrl())
            .username(props.getUsername())
            .password(props.getPassword())
            .build();
}

@Bean
@ConfigurationProperties(prefix = "datasource.primary")
public DataSource secondaryDataSource() {
    DataSourceProperties props = secondaryProps();
    return DataSourceBuilder.create(props.getClassLoader())
            .driverClassName(props.getDriverClassName())
            .url(props.getUrl())
            .username(props.getUsername())
            .password(props.getPassword())
            .build();
}
+1

Source: https://habr.com/ru/post/1609727/


All Articles