我正在配置两个数据源,并尝试设置池属性,并且根据文档,我应该使用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,则还负责配置的绑定。
DataSource
您上面的代码有个@ConfigurationPropeties("spring.datasource")。如果删除该spring.datasource.*属性,则您自己的代码中不会考虑任何属性。
@ConfigurationPropeties("spring.datasource")
spring.datasource.*
该部分文档说明了基本属性(spring.datasource)和数据源绑定(spring.datasource.xyz.*)之间的区别。
spring.datasource
spring.datasource.xyz.*
无论如何,如果要创建DataSource自己(为什么?),请使用单独的名称空间。重用spring.datasource名称空间非常令人困惑,因为用户期望自动配置提供的功能会得到尊重。由于您正在编写自己的配置,因此不会。