属性设置后如何初始化数据库bean?

时间:2018-07-13 12:56:13

标签: java spring spring-boot lazy-initialization spring-data-cassandra

我有带有两个数据库的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;
    }
}

2 个答案:

答案 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;
}