Spring Boot在以编程方式配置数据源时没有选择spring.datasource.tomcat。*?

【字号: 日期:2024-01-22浏览:38作者:雯心
如何解决Spring Boot在以编程方式配置数据源时没有选择spring.datasource.tomcat。*??

该文档是关于自动配置的,您没有在使用它。如果您正在编写用于设置的自定义代码DataSource,则还负责配置的绑定。

您上面的代码有个@ConfigurationPropeties('spring.datasource')。如果删除该spring.datasource.*属性,则您自己的代码中不会考虑任何属性。

该部分文档说明了基本属性(spring.datasource)和数据源绑定(spring.datasource.xyz.*)之间的区别。

无论如何,如果要创建DataSource自己(为什么?),请使用单独的名称空间。重用spring.datasource名称空间非常令人困惑,因为用户期望自动配置提供的功能会得到尊重。由于您正在编写自己的配置,因此不会。

解决方法

我正在配置两个数据源,并尝试设置池属性,并且根据文档,我应该使用spring.datasource.tomcat。*,这似乎不适用于我正在执行的配置。我究竟做错了什么?还是我想念什么?

我的application.properties:

spring.datasource.tomcat.test-on-borrow=truespring.datasource.tomcat.validationQuery=SELECT 1 spring.datasource.url=jdbc:mysql://localhost:3306/mydbspring.datasource.usernamespring.datasource.passwordspring.read.datasource.tomcat.test-on-borrow=truespring.read.datasource.tomcat.validationQuery=SELECT 1 spring.read.datasource.url=jdbc:mysql://localhost:3306/mydbspring.read.datasource.usernamespring.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。*样式不起作用?而我能做些什么呢?

即使有人将我重定向到一些有用的阅读材料以帮助您理解这一点,我也会很高兴。:)

相关文章: