[英]Spring order beans by class ordering
我有兩個類,其中一個類應該在運行時首先在這兩個類中執行,但它正在以相反的方式發生。
頭等艙:
@Configuration
public class A(){
@Bean
public void methodA(){}
@Bean
public void methodB(){
for(i=0;i<9;i++){
B b = new B();
b.setJdbcUrl();
b.setUsername();
b.setPassword();
}
}
}
第二類:
@Configuration
public class B() extends HikariConfig {
@Bean
public HikariDataSource mysqlDataSource(){}
@Bean(name = "someEntityManager")
public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {}
@Bean(name = "someTransactionManager")
public PlatformTransactionManager mysqlTransactionManager(@Qualifier("someEntityManager") EntityManagerFactory entityManagerFactory) {}
目前 Spring 遵循的順序是:
1) b.mysqlDataSource()
2) b.LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder)
3) b.PlatformTransactionManager mysqlTransactionManager(@Qualifier("someEntityManager") EntityManagerFactory entityManagerFactory)
4) a.methodA()
5) a.methodB()
我的順序應該是 Spring,如下所示:
1) a.methodA()
2) a.methodB()
3) b.mysqlDataSource()
4) b.LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder)
5) b.PlatformTransactionManager mysqlTransactionManager(@Qualifier("someEntityManager") EntityManagerFactory entityManagerFactory)
並且它還必須經過代碼,其中B類是唯一依賴於所有url,用戶名和密碼設置的A類,因此必須首先啟動A。
您可以使用@DependsOn:
@Configuration
public class A {
@Bean
public void methodA() {
}
@DependsOn("methodA")
@Bean
public void methodB() {
for (i = 0; i < 9; i++) {
B b = new B();
b.setJdbcUrl();
b.setUsername();
b.setPassword();
}
}
}
@Configuration
@DependsOn({"methodA", "methodB"})
public class B extends HikariConfig {
@DependsOn("mysqlEntityManagerFactory")
@Bean
public HikariDataSource mysqlDataSource() {
}
@DependsOn("mysqlTransactionManager")
@Bean(name = "someEntityManager")
public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
}
@Bean(name = "someTransactionManager")
public PlatformTransactionManager mysqlTransactionManager(@Qualifier("someEntityManager") EntityManagerFactory entityManagerFactory) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.