我需要读取我的数据库以在Spring @Configuration类中加载自定义设置。
我有类似的东西:
@Configuration
public MyConfigClass implements ApplicationContextAware{
@Bean(initMethod = "start", destroyMethod = "stop")
public ServerSession serverSession() throws Exception {
ServerSession serverSession = new ServerSession(urlGateway, useSsl, hostGateway, portGateway);
return serverSession;
}
我应该从DB中读取参数而不是属性文件。我知道我不能直接将我的存储库注入到这个类中,但有一个技巧或某些东西允许我这样做或者至少对db进行查询?
我正在使用Hibernate + Spring + Spring Data。
答案 0 :(得分:2)
我更喜欢将必要的依赖项作为参数注入。在@Autowired
类中使用@Configuration
字段对我来说看起来不自然(只使用有状态字段,因为配置应该是无状态的)。只需将其作为bean方法的参数提供:
@Bean(initMethod = "start", destroyMethod = "stop")
public ServerSession serverSession(MyRepo repo) throws Exception {
repo.loadSomeValues();
ServerSession serverSession = new ServerSession(urlGateway, useSsl, hostGateway, portGateway);
return serverSession;
}
这可能需要在方法级别使用@Autowired
本身,具体取决于Spring版本:
@Bean(initMethod = "start", destroyMethod = "stop")
@Autowired
public ServerSession serverSession(MyRepo repo) throws Exception {
repo.loadSomeValues();
ServerSession serverSession = new ServerSession(urlGateway, useSsl, hostGateway, portGateway);
return serverSession;
}
另见:
答案 1 :(得分:0)
@Configuration类中的自动装配和DI工作。如果您遇到困难,可能是因为您在应用启动生命周期中过早地尝试使用注入的实例。
@Configuration
public MyConfigClass implements ApplicationContextAware{
@Autowired
private MyRepository repo;
@Bean(initMethod = "start", destroyMethod = "stop")
public ServerSession serverSession() throws Exception {
// You should be able to use the repo here
ConfigEntity cfg = repo.findByXXX();
ServerSession serverSession = new ServerSession(cfg.getUrlGateway(), cfg.getUseSsl(), cfg.getHostGateway(), cfg.getPortGateway());
return serverSession;
}
}
public interface MyRepository extends CrudRepository<ConfigEntity, Long> {
}