如何为Spring Batch配置数据源?
如何为Spring Batch配置数据源?
我使用的是Spring Boot和MySQL数据库。我有两个数据库用户。
- Admin用户用于由liquibase创建表。它有自己的数据源。
- Dev用户用于读/写表中的数据。它有另一个数据源。
@Bean public DataSource devDataSource() { HikariDataSource dataSource = new HikariDataSource(); ... ... return dataSource; }
@Bean public DataSource liquibaseDataSource() { HikariDataSource dataSource = new HikariDataSource(); ... ... return dataSource; }
现在我正在尝试将Spring Batch添加到服务中。我遇到了重复bean异常。
当我将@Primary添加到liquibase数据源时,问题得到解决,但我们不想将其用于批处理的读/写操作。
如果我在Dev用户数据源中添加@Primary,则无法创建批处理元数据表。
据我所知,Dev用户没有创建表的权限。因此,当为批处理配置Dev数据源时,表不会被创建。
如果可能的话,我希望通过Spring配置(自动)创建批处理元数据表,并通过Dev用户对所有表(包括批处理元表)进行读写操作。
不确定我在这里漏掉了什么。非常感谢您的帮助。
问题的原因是在spring batch中无法使用上述的配置方式来配置数据源。解决方法是使用spring batch提供的特定配置来配置数据源。
解决方法如下:
1. 创建一个类,用于配置数据源。可以命名为DataSourceConfig。
2. 在该类中,使用@Configuration注解来标记该类为配置类。
3. 在该类中,使用@Bean注解来标记方法,该方法用来配置数据源。
4. 在该方法中,使用特定的配置方式来配置数据源。可以使用spring boot提供的DataSourceBuilder来创建数据源。
5. 在需要使用数据源的地方,通过注入的方式来获取数据源。
具体代码如下:
@Configuration public class DataSourceConfig { @Bean @Primary @ConfigurationProperties(prefix = "spring.datasource.hikaridev") public DataSource devDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.liquibase") public DataSource liquibaseDataSource() { return DataSourceBuilder.create().build(); } }
在需要使用数据源的地方,可以通过注入的方式来获取数据源,如下所示:
@Autowired private DataSource devDataSource; @Autowired private DataSource liquibaseDataSource;
这样就可以在spring batch中正确地配置数据源了。