こんにちは、私は春と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
で他の設定から環境をインポートできない理由はありますか?