我正在配置两个数据源,并尝试设置池属性,并且根据文档我应该使用spring.datasource.tomcat。*,这似乎不适用于我正在进行的配置。我究竟做错了什么?或者我错过了什么?
我的application.properties:
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.validationQuery=SELECT 1
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username
spring.datasource.password
spring.read.datasource.tomcat.test-on-borrow=true
spring.read.datasource.tomcat.validationQuery=SELECT 1
spring.read.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.read.datasource.username
spring.read.datasource.password
以下是我的配置类: 我有一个类似的读数据源(针对不同的repo /实体)
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory",
transactionManagerRef = "transactionManager",
basePackages = "com.test.feature.repo.internal")
public class DataSourceConfig {
@Primary
@Bean("dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name="entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
@Qualifier("dataSource")DataSource dataSource){
return builder.dataSource(dataSource).packages("com.test.feature.entity.internal").persistenceUnit("defaultPersistenceUnit").build();
}
@Primary
@Bean(name="transactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory){
return new JpaTransactionManager(entityManagerFactory);
}
}
如果我尝试使用spring.datasource.test-on-borrow = true,那么这可行。
我真的想知道为什么.tomcat。*样式不起作用?我能做些什么才能做到这一点?
即使有人将我重新定向到一些有用的阅读材料来理解这一点,我也会很高兴。 :)
答案 0 :(得分:4)
该文档是关于自动配置的,您没有使用它。如果您正在编写自定义代码来设置DataSource
,那么您也负责配置的绑定。
上面的代码有一个@ConfigurationPropeties("spring.datasource")
。如果删除它,则不会在您自己的代码中考虑spring.datasource.*
属性。
This section of the doc解释了基本属性(spring.datasource
)和数据源绑定(spring.datasource.xyz.*
)之间的区别。
无论如何,如果您自己创建DataSource
(为什么?),请使用单独的命名空间。重用spring.datasource
命名空间非常混乱,因为用户期望自动配置提供的功能将得到尊重。他们不会写你自己的配置。
答案 1 :(得分:1)
我在application.properties
中添加了以下两行。
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.read.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
正在运行...谢谢。
答案 2 :(得分:0)
如果您只有一个数据源和自动配置,则只需要使用spring.datasource。*来配置。 tomcatcp将被选为默认cp。
在您的情况下:以编程方式配置两个dataSource,请在 application.properties 中添加以下注释 spring.datasource.type ,告诉它哪个连接池你选。
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.read.datasource.type=org.apache.tomcat.jdbc.pool.DataSource