0

Spring で問題に直面しています: Spring Security ver. から移行しています。3.2.7.RELEASE4.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 が初期化される前に、この構成を適切にロードするソリューションはありますか? それとも、私は間違っていて、何かが欠けているのですか(そうではないかもしれません)明らかですか?

4

0 に答える 0