我遇到了Spring问题:我正在从Spring Security ver迁移。 3.2.7.RELEASE
到4.0.2.RELEASE
。在旧版本中一切正常,但在加载DataSource
时出现了问题。
让我来描述架构:
使用SAML和LDAP机制保护应用程序(SAML配置与此处给出的配置非常相似:https://github.com/vdenotaris/spring-boot-security-saml-sample/blob/master/src/main/java/com/vdenotaris/spring/boot/security/saml/web/config/WebSecurityConfig.java)。
他们都需要连接到数据库才能获得一些必需的数据。我们使用MyBatis和Spring Mybatis来获取所需的数据。那是问题开始的地方。
我的DAO配置类如下所示:
@Configuration
@EnableConfigurationProperties
@MapperScan(basePackages = { "pl.myapp" })
public class DaoConfiguration {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
@Bean
@Primary
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
// some stuff happens here
return sqlSessionFactoryBean;
}
@Bean
@Primary
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
@ConfigurationProperties(prefix = "liquibase.datasource")
@ConditionalOnProperty(name="liquibase.enabled")
public DataSource liquibaseDataSource() {
DataSource liquiDataSource = DataSourceBuilder.create().build();
return liquiDataSource;
}
}
在以前的版本中,它就像一个魅力,但现在加载映射器时出现问题,导致Bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'someMapper' defined in file [<filename>]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
一遍又一遍(这不是我的问题,这是一个已知的Spring / MyBatis错误)。
我做了一些调试并发现了一些有趣的东西:看起来DaoConfiguration
在这里看起来不像配置!我的意思是:如果我添加
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
return sqlSessionFactoryBean().getObject();
}
到这个配置,@Bean
注释方法的“正常”调用应该导致调用适当的拦截器,这里它缺乏这个功能。
我的预测是:这个配置类尚未正确包装,Spring Security已经需要它生成的bean。
在Spring Security初始化之前,是否有任何解决方案可以正确加载此配置?或者我错了,遗漏了一些东西(可能不那么明显)?