在具有多个模块的配置中找不到Java Bean

时间:2018-05-04 09:00:10

标签: java spring

我遇到导致以下错误的配置问题。我知道有很多类似的问题,但我读了很多回答,stackoverflow建议我的标题,但我还没有找到正确的答案。

Description:

Field collaborateurJpaRepository in com...infrastructure.persistence.user.UserRepositoryImpl required a bean of type 'com...infrastructure.persistence.jurisdiction.CollaborateurJpaRepository' that could not be found.

Action:

Consider defining a bean of type 'com...infrastructure.persistence.jurisdiction.CollaborateurJpaRepository' in your configuration.

在提供代码的一些细节之前,我认为我可以很好地描述你的背景。 我在一个客户端项目上工作,该项目有 8个maven模块(DDD方法),因为在年底时,4个模块将在另一个服务器中分开。 最近我们创建了第二个oracle数据库,所以我不得不创建多个配置来引用好的dataSource。 我认为问题是由于糟糕的数据源配置阻止了bean弹簧的实例化。

我们正在使用 spring boot version 1.5.7.release

第一次基础设施配置

@Configuration
@ComponentScan(basePackages = "com...jade")
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "jadeEntityManager", transactionManagerRef = "jadeTransactionManager")
@EntityScan(basePackages = { "com...jade", "org.springframework.data.jpa.convert.threeten" })
@Profile({"ARA_JADE_CONF", "LOCAL_JADE_CONF"})
public class InfrastructureConfig {

    private final static int JDBC_FETCH_SIZE = 1000;

    @Autowired
    private Environment environment;

    @Bean
    public LocalContainerEntityManagerFactoryBean jadeEntityManager() throws SQLException {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSourceJade());
        em.setPackagesToScan(new String[] {"com...jade"});
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalProperties());
        return em;
    }
    @Bean
    @Primary
    public OracleDataSource dataSourceJade() throws SQLException {
        OracleDataSource dataSource = new OracleDataSource();
        dataSource.setUser(environment.getProperty("db.datasource.jade.username"));
        dataSource.setPassword(environment.getProperty("db.datasource.jade.password"));
        dataSource.setURL(environment.getProperty("db.datasource.jade.url"));
        dataSource.setImplicitCachingEnabled(true);
        dataSource.setFastConnectionFailoverEnabled(true);
        return dataSource;
    }
    @Bean(name="jdbcTemplateJade")
    public JdbcTemplate jdbcTemplateJade() throws SQLException {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSourceJade());
        jdbcTemplate.setResultsMapCaseInsensitive(true);
        jdbcTemplate.setFetchSize(JDBC_FETCH_SIZE);
        return jdbcTemplate;
    }
    @Bean
    public PlatformTransactionManager transactionManager() throws SQLException{
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(jadeEntityManager().getObject());

        return transactionManager;
    }
    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    } ...

Seconde基础架构配置

@Configuration
@ComponentScan(basePackages =  "com.bnpparibas.sit.risk.art")
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "artEntityManager", transactionManagerRef = "artTransactionManager")
@EntityScan(basePackages = { "com...art", "org.springframework.data.jpa.convert.threeten" })
@Profile({"LOCAL_ART_CONF,'ARA_ART_CONF"})
public class ArtInfrastructureConfig {

    private final static int JDBC_FETCH_SIZE = 1000;

    @Autowired
    private Environment environment;


    @Bean
    @Primary
    public LocalContainerEntityManagerFactoryBean artEntityManager() throws SQLException {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSourceArt());
        em.setPackagesToScan(new String[] {"com...art.infrastructure.persistence"});
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalProperties());
        return em;
    }

    @Bean
    @Primary
    public OracleDataSource dataSourceArt() throws SQLException {
        OracleDataSource dataSource = new OracleDataSource();
        dataSource.setUser(environment.getProperty("db.datasource.art.username"));
        dataSource.setPassword(environment.getProperty("db.datasource.art.password"));
        dataSource.setURL(environment.getProperty("db.datasource.art.url"));
        dataSource.setImplicitCachingEnabled(true);
        dataSource.setFastConnectionFailoverEnabled(true);
        return dataSource;
    }

    @Bean
    @Primary
    public PlatformTransactionManager artTransactionManager()throws SQLException{
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(artEntityManager().getObject());

        return transactionManager;
    }

    @Bean
    @Primary
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }...

实体的接口链接。

@DDD.Repository
@Repository
public interface CollaborateurJpaRepository extends CrudRepository<Collaborateur,String>{

    @Query("FROM ART_PARAM.ART_USER u WHERE u.refogUID = :uid")
    Collaborateur findCollaborateurById(@Param("uid") String uid);
}

包含自动装配接口的类,用于检索第二个数据库的某些数据。

@DDD.RepositoryImpl
@Repository
@Primary
public class UserRepositoryImpl implements UserRepository {

    @Autowired
    private CollaborateurJpaRepository collaborateurJpaRepository;

    @Override
    //@Cacheable(cacheNames = CacheConfig.CACHE_JURIDICTION, key = CacheConfig.CACHE_KEY_UTILISATEUR_ID)
    @Transactional("entityManagerFactoryArt")
    public User retrieveUser(UserId userId) {
        if(userId.getValue() == null) {
            return null;
        } else {
            Collaborateur collaborateur = collaborateurJpaRepository.findOne(userId.getValue());

            return new User(collaborateur.getRefogUID(),collaborateur.getRefogFirstName(),collaborateur.getRefogLastName(),collaborateur.getProfile(),collaborateur.isActiveUser(),collaborateur.isBankingSecrecy());
        }
    }

0 个答案:

没有答案