java - PersistenceAnnotationBeanPostProcessor 是否会以某种方式影响环境或@PropertySource?

标签 java spring spring-mvc jpa

嗨,我是 Spring 和 Jpa 集成的初学者。当我尝试配置我的数据库连接时,详细信息处理程序 itp。我发现了 Spring 的奇怪行为。

首先,我有3个配置文件:

1) RootConfig - 包含除 Controller 之外的所有内容

2) WebConfig - 包含每个带有 Controller 注释的 Bean

3) JdbcConfig - 包含与数据源相关的 Bean,此配置由 RootConfig 使用此注释导入 (@Import(JdbcConfig.class))。

根配置如下所示:

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

}

Jdbc配置:

@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)}}

此时一切正常,环境字段不为空值并且包含所有定义的属性。当我尝试添加 Bean PersistenceAnnotationBeanPostProcessor 时出现问题。因此,当我将此 Bean 添加到 JdbcConfig.class 时,Environment 字段变为 null,但是当我添加此 RootConfig Environment 时,再次包含所有需要的值。那么 propertySource 和这个 bean 是否存在任何已知问题? PersistenceAnnotationBeanPostProcessor 是否会以某种方式影响 @PropertySource 或 @Autorwired(@Inject/@Ressource) 环境字段?是否有任何原因导致环境必须在主配置中配置并且无法通过 @Import 从其他配置导入?

最佳答案

我认为您的问题与这个 Spring 问题有关 SPR-8269 .

您可以尝试将 PersistenceAnnotationBeanPostProcessor bean 定义设置为静态吗?

我也遇到了同样的问题,我是这样解决的。

关于java - PersistenceAnnotationBeanPostProcessor 是否会以某种方式影响环境或@PropertySource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39759167/

相关文章:

java - 使用 ExecutorService 并行化循环来执行任务

java - Spring MVC Controller 方法的有效返回类型是什么?

java - Spring 4 : MethodInvokingFactoryBean on a FactoryBean<> instance

java - 使用 Spring Boot 时,@PathVariable 参数值包含 '#' 字符后出现问题

java - 文档.newPage();不在 iText 中的每个循环内部工作

Java:转换为接口(interface)和继承

java - 无法读取 JSON : Unexpected end-of-input in field name

java - StringEntity 的 Spring REST Controller

java - HTTP 403 禁止 - Auth JASS Spring Camel

java - Spring 安全 : Java Config does not work