如何解决无法绑定到DatasourceProperties
当我尝试在Spring Boot中配置多个数据源时,出现以下错误:
Property: xyz.integration.multidatasources.connections.datasource1.username Value: safuser Origin: class path resource [application.properties]:14:67 Reason: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType
当我尝试加载多个数据源配置时。属性如下:
xyz.integration.multidatasources.connections.datasource1.url=jdbc:postgresql://localhost:5432/safdb
xyz.integration.multidatasources.connections.datasource1.driver-class-name=org.postgresql.Driver
xyz.integration.multidatasources.connections.datasource1.username=auser
xyz.integration.multidatasources.connections.datasource1.password=apassword
java类如下:
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "xyz.integration.multidatasources")
public class MultipleDatasourcesProperties {
private Map<String,DataSourceProperties> connections = new HashMap<>();
public Map<String,DataSourceProperties> getConnections() {
return connections;
}
public void setConnections(Map<String,DataSourceProperties> connections) {
this.connections = connections;
}
}
我在配置中缺少任何内容吗?
解决方法
你可以试试吗?
application.properties
primary.url={primary-database-url}
primary.username={primary-database-username}
primary.password={primary-database-password}
primary.driver-class-name=com.mysql.jdbc.Driver
primary.test-on-borrow=true
primary.validation-query=SELECT 1
secondary.url={secondary-database-url}
secondary.username={secondary-database-username}
secondary.password={secondary-database-password}
secondary.driver-class-name=com.mysql.jdbc.Driver
secondary.test-on-borrow=true
secondary.validation-query=SELECT 1
secondary.validation-interval=25200000
创建配置bean
@Bean(name = "primaryDataSource")
@ConfigurationProperties("primary")
@Primary
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties("secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
接下来,在数据访问层中创建将用于访问数据源的JdbcTemplate bean。
@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primary") DataSource primaryDs) {
return new JdbcTemplate(writeDs);
}
@Bean(name = “secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondary") DataSource secondaryDs) {
return new JdbcTemplate(secondaryDs);
}
尝试访问如下属性:
@Resource(name = "primaryJdbcTemplate")
private JdbcTemplate primaryJdbcTemplate;
@Resource(name = "secondaryJdbcTemplate")
private JdbcTemplate secondaryJdbcTemplate;
primaryJdbcTemplate.query(“any-query-to-apply-on-primary-data-source”);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。