我有带有两个数据库的Spring Boot应用程序:H2和Cassandra。
启动后,它没有cassandra属性。除了cassandra config,它还有一些依赖于сassandra的存储库和服务。设置必要的设置后,我将立即使用它们。但是spring尝试从一开始就加载所有这些bean。
设置后如何加载该bean?
现在我有一个简单的cassandra配置,如下所示:
@Configuration
@EnableCassandraRepositories
public class CassandraConfig extends AbstractCassandraConfiguration {
@Setter
private String contactPoints;
@Setter
private int port;
@Setter
private String keySpace;
@Override
protected String getKeyspaceName() {
return keySpace;
}
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints(contactPoints);
cluster.setPort(port);
return cluster;
}
}
答案 0 :(得分:0)
在所有bean初始化后为要加载的bean提供@Lazy注释。
@Bean
@Lazy
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints(contactPoints);
cluster.setPort(port);
return cluster;
}
答案 1 :(得分:0)
如果您希望Spring在设置加载后实例化此bean,请考虑Spring依赖项,例如:
CassandraClusterFactoryBean requires/depends on CassandraConfig
Spring会按照所需顺序小心地创建bean。
您可以定义集群bean,例如:
@Bean
public CassandraClusterFactoryBean cluster(CassandraConfig config) {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints(config.getContactPoint());
cluster.setPort(config.getPort());
return cluster;
}