2016-09-28 7 views
1

こんにちは、私は春とJpaの統合の初心者です。私はデータベース接続を設定しようとしているが、詳細ハンドラitp。私は春の奇妙な動きに出くわしました。PersistenceAnnotationBeanPostProcessorは環境や@PropertySourceに何らかの影響を与えますか?

まず第一に、私は3設定ファイルがあります。

1)RootConfig - コントローラ

2以外のすべて)のWebConfigが含まれています - JdbcConfig)

3注釈付きのコントローラであるすべての豆が含まれています - 含まれていますdataSourceに関連するBean。この設定は、この注釈(@Import(JdbcConfig.class))を使用してRootConfigによってインポートされます。

@Configuration 
@Import(JdbcConfig.class) 
@ComponentScan(basePackages = "app", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = {EnableWebMvc.class, Controller.class})}) 
public class RootConfig 
{ 

} 

JdbcConfig:

RootConfigは次のようになり、すべてが正常に動作します。このとき

@Configuration 
@PropertySource("classpath:db.properties") 
@EnableTransactionManagement 
public class JdbcConfig 
{ 

    @Resource 
    public Environment env; 


    @Bean 
    public DataSource dataSource() 
    { 
     System.out.println(env); 
     DriverManagerDataSource ds = new DriverManagerDataSource(); 
     ds.setDriverClassName(env.getProperty("dataSource.driverClassName")); 
     ds.setUrl(env.getProperty("dataSource.Url")); 
     ds.setUsername(env.getProperty("dataSource.username")); 
     ds.setPassword(env.getProperty("dataSource.password")); 
     return ds; 

    } 



    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource ds, JpaVendorAdapter jpaVendorAdapter) 
    { 
     LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean(); 
     emfb.setDataSource(ds); 
     emfb.setJpaVendorAdapter(jpaVendorAdapter); 
     emfb.setPackagesToScan("app.model"); 
     return emfb; 
    } 

    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() 
    { 
     HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
     adapter.setDatabase(Database.POSTGRESQL); 
     adapter.setShowSql(true); 
     adapter.setGenerateDdl(true); 
     adapter.setDatabasePlatform(env.getProperty("dataSource.dialect")); 

     return adapter; 
    } 



    @Bean 
    public BeanPostProcessor beanPostProcessor() 
    { 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 


    @Bean 
    public JpaTransactionManager jpaTransactionManager(EntityManagerFactory em) { 
     return new JpaTransactionManager(em)}} 

、環境フィールドはNULL値ではなく、定義されたすべてのプロパティが含まれています。 Beanを追加しようとしたときに問題が表示されるPersistenceAnnotationBeanPostProcessorこのBeanをJdbcConfig.classに追加すると、Environmentフィールドはnullになりましたが、このRootConfig Environmentを追加すると、必要な値がすべて追加されます。それで、propertySourceとこのBeanに関する既知の問題はありますか? PersistenceAnnotationBeanPostProcessorは何とか@PropertySourceまたは@Autorwired(@ Inject/@ Ressource)環境フィールドに影響しますか?メイン設定で環境を設定する必要があり、@Importで他の設定から環境をインポートできない理由はありますか?

答えて

0

あなたの問題はこの春の問題SPR-8269に関連していると思います。

PersistenceAnnotationBeanPostProcessor Bean定義を静的に設定できますか?

私も同じ問題を抱えており、このように解決しました。

関連する問題