当定义了多个数据源时出现异常 'java.lang.IllegalStateException:Expected one datasource and found 2'
Getting Exception 'java.lang.IllegalStateException:Expected one datasource and found 2' when more than one datasource defined
当我在 spring 云任务应用程序中定义多个数据源时,它会引发异常。这就是我定义数据源的方式
@Primary
@Bean(name="datasource1")
@ConfigurationProperties(prefix="spring.datasource")
public javax.sql.DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="datasource2")
@ConfigurationProperties(prefix="spring.datasource1")
public javax.sql.DataSource primaryDataSource1() {
return DataSourceBuilder.create().build();
}
@Bean
public TaskConfigurer taskConfigurer() {
return new DefaultTaskConfigurer(primaryDataSource());
}
我看到了像上面那样放置 @Primary 定义 TaskConfigurer 的建议,但是其中 none working.Has 有人遇到过这种问题吗?
谢谢,
尼尔
您将需要覆盖侦听器。它与其他围绕任务的自动配置一样,在您定义了多个数据源时不知道要使用哪个数据源。我创建了一个问题来在未来的版本中解决这个问题:https://github.com/spring-cloud/spring-cloud-task/issues/252
您需要覆盖 DefaultTaskConfigurer
@Configuration
public class BatchConfigurer extends DefaultTaskConfigurer
{
public BatchConfigurer(@Qualifier("batchDataSource") DataSource dataSource)
{
super(dataSource);
}
}
当我在 spring 云任务应用程序中定义多个数据源时,它会引发异常。这就是我定义数据源的方式
@Primary
@Bean(name="datasource1")
@ConfigurationProperties(prefix="spring.datasource")
public javax.sql.DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="datasource2")
@ConfigurationProperties(prefix="spring.datasource1")
public javax.sql.DataSource primaryDataSource1() {
return DataSourceBuilder.create().build();
}
@Bean
public TaskConfigurer taskConfigurer() {
return new DefaultTaskConfigurer(primaryDataSource());
}
我看到了像上面那样放置 @Primary 定义 TaskConfigurer 的建议,但是其中 none working.Has 有人遇到过这种问题吗?
谢谢, 尼尔
您将需要覆盖侦听器。它与其他围绕任务的自动配置一样,在您定义了多个数据源时不知道要使用哪个数据源。我创建了一个问题来在未来的版本中解决这个问题:https://github.com/spring-cloud/spring-cloud-task/issues/252
您需要覆盖 DefaultTaskConfigurer
@Configuration
public class BatchConfigurer extends DefaultTaskConfigurer
{
public BatchConfigurer(@Qualifier("batchDataSource") DataSource dataSource)
{
super(dataSource);
}
}