@Bean(initMethod = "init") @Primary @Qualifier("primaryDataSource") @ConfigurationProperties(prefix="spring.datasource.primary") public DataSource primaryDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(initMethod = "init") @Qualifier("secondaryDataSource") @ConfigurationProperties(prefix="spring.datasource.secondary") public DataSource secondaryDataSource() { return DruidDataSourceBuilder.create().build(); }两个method方式都命名init可以吗
时间: 2024-03-01 09:53:08 浏览: 17
不可以,这两个方法都使用了相同的名称 "init" 作为初始化方法的名称,这会导致 Spring 在初始化时无法区分这两个方法。为了避免这种问题,你需要为这两个方法分别指定不同的初始化方法名称,例如:
```
@Bean(initMethod = "initPrimary")
@Primary
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary")
public DataSource primaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(initMethod = "initSecondary")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
```
这里我将第一个方法的初始化方法名称改为 "initPrimary",第二个方法的初始化方法名称改为 "initSecondary",这样 Spring 在初始化时就可以正确地识别这两个方法了。
相关问题
@Primary @Bean(name = "mysqlPs90DataSource") @Qualifier("mysqlPs90DataSource") @ConfigurationProperties(prefix = "spring.mysql-ps90.datasource") public DataSource mysqlPs90DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "mssqlDataSource") @Qualifier("mssqlDataSource") @ConfigurationProperties(prefix = "spring.mssql.datasource") public DataSource mssqlDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "iobd2DataSource") @Qualifier("iobd2DataSource") @ConfigurationProperties(prefix = "spring.iobd2.datasource") public DataSource iobd2DataSource() { return DataSourceBuilder.create().build(); }
这段代码是在Spring Boot应用程序中创建三个数据源的配置。@Bean注释告诉Spring容器需要实例化这些对象并作为bean进行管理。@Primary注释指定了默认的数据源,如果有多个数据源的话,那么默认会使用该注释的数据源。@Qualifier注释用于指定bean的名称。@ConfigurationProperties注释用于从application.properties文件中读取相关配置属性。在这个例子中,我们使用了三个不同的前缀来指定不同的数据源配置属性。最后,每个数据源都通过调用DataSourceBuilder.create().build()方法来创建并返回。
@Bean(name = "dataReportMQTaskExecutor") public ThreadPoolTaskExecutor mqExecutor() {} 如何去获取这个ThreadPoolTaskExecutor
要获取名为"dataReportMQTaskExecutor"的ThreadPoolTaskExecutor,可以使用@Autowired和@Qualifier注释来注入它。具代码如下:
```java
@Autowired
@Qualifier("dataReportMQTaskExecutor")
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
```
其中,@Autowired注释用于自动装配bean,@Qualifier注释用于指定要注入的bean的名称。在这种情况下,我们指定了名称为"dataReportMQTaskExecutor"的bean。