Spring Boot不会选择spring.datasource.tomcat。*,而以编程方式配置数据源?
我正在配置两个数据源,并尝试设置池化属性,并根据文档我应该使用spring.datasource.tomcat。*,似乎并不适用于我正在做的配置。我究竟做错了什么?或者我错过了什么?Spring Boot不会选择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
下面是我的配置类: 我有一个类似的读取数据源(不同回购/实体)
@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。*样式不起作用?我能做些什么来完成这项工作?
即使有人将我重定向到一些有用的阅读材料,以了解这一点,我会很高兴。 :)
该文档是关于自动配置,你没有使用它。如果您正在编写自定义代码来设置DataSource
,则您也负责配置的绑定。
您的代码上面有@ConfigurationPropeties("spring.datasource")
。如果删除它,则在您自己的代码中将不会考虑spring.datasource.*
属性。
This section of the doc解释了基本属性(spring.datasource
)和数据源绑定(spring.datasource.xyz.*
)之间的差异。
无论如何,如果您自己创建DataSource
(为什么?),则使用单独的名称空间。重命名spring.datasource
命名空间相当混乱,因为用户期望自动配置提供的功能将得到遵守。而且他们不会因为你正在编写你自己的配置。
然后如何配置多个数据源,以使池属性不受影响。 (在这种情况下是tomcat jdbc池)。文档不包括这个地方。 –
该文档涵盖了完全(我在我的答案给了一个链接)。你看过吗? –
找到了。我错过了连接属性也可以在同一个命名空间中指定。谢谢你的帮助 –
如果你只有一个数据源和自动配置,你只需要使用spring.datasource。*来配置。 tomcatcp将被选作默认cp。
你的情况:配置两个数据源编程方式,请添加以下注释spring.datasource.type在application.properties告诉它你选择哪种连接池。
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource spring.read.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
您正在使用哪个版本? –
我正在使用1.5.4 –
1.5.7中的情况与我相同。 DataSource没有选择'spring.datasource.tomcat。*'属性。对我来说,即使spring.datasource.test-on-borrow = true也不起作用。 –