2014-10-23 2 views
0

스프링 프로파일을 사용하여 개발을위한 지속성 구성과 openshift라는 프로덕션을위한 지속성 구성을 사용하려고합니다. 로그 메시지가 부족하여 판단 할 수없는 방식으로 내 openshift 프로필이로드됨을 알 수 있습니다. 누구든지 내가 뭘 잘못하고 있는지에 대한 단서가 있습니까?프로필 메서드가로드되지 않습니다.

import ...; 

@Configuration 
@PropertySource("classpath:persistence-${envTarget:default}.properties") 
@EnableJpaRepositories(basePackages = {"dk.fitfit.campusfood.model", "dk.fitfit.campusfood.repository"}) 
public class PersistenceConfig { 
    private static final Logger logger = LoggerFactory.getLogger(PersistenceConfig.class); 

    @Autowired 
    private DataInitializer dataInitializer; 

    @Autowired 
    private Environment env; 

    private final String packagesToScan = "dk.fitfit.campusfood.*"; 


    public PersistenceConfig() { 
     logger.info("PersistenceConfig loaded!"); 
    } 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

    @Bean 
    public DataSource dataSource() { 
     return new EmbeddedDatabaseBuilder() 
      .setType(EmbeddedDatabaseType.H2) 
      .build(); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setDataSource(dataSource()); 
     factory.setPackagesToScan(packagesToScan); 
     factory.setJpaVendorAdapter(jpaVendorAdapter()); 
     factory.setJpaProperties(additionalProperties()); 
     return factory; 
    } 

    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() { 
     HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); 
     hibernateJpaVendorAdapter.setShowSql(true); 
     hibernateJpaVendorAdapter.setGenerateDdl(true); 
     hibernateJpaVendorAdapter.setDatabase(Database.H2); 
     return hibernateJpaVendorAdapter; 
    } 

    private Properties additionalProperties() { 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.hbm2ddl.auto", "create"); 
     properties.setProperty("hibernate.dialect", env.getProperty("jdbc.hibernate.dialect")); 
     properties.setProperty("hibernate.show_sql", "true"); 
     return properties; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); 
     return transactionManager; 
    } 

    // Activate this profile on openshift by running: rhc set-env JAVA_OPTS_EXT=-Dspring.profiles.active=openshift -a campusfood 
    @Configuration 
    @Profile("openshift") 
    public static class OpenShiftPersistenceConfig { 
     private static final Logger logger = LoggerFactory.getLogger(OpenShiftPersistenceConfig.class); 

     private String driverClassName = "org.postgresql.Driver"; 
     private String database = "campusfood"; 
     private String url = System.getenv("OPENSHIFT_POSTGRESQL_DB_URL") + "/" + database; 

     @PostConstruct 
     public void postConstructor() 
     { 
      logger.info("OpenShiftPersistenceConfig loaded!"); 
     } 

     @Bean 
     public JpaVendorAdapter jpaVendorAdapter() { 
      logger.info("jpaVendorAdapter()"); 
      HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
      vendorAdapter.setGenerateDdl(true); 
      vendorAdapter.setShowSql(true); 
      vendorAdapter.setDatabase(Database.POSTGRESQL); 
      return vendorAdapter; 
     } 

     @Bean 
     public DataSource dataSource() 
     { 
      logger.info("dataSource()"); 
      BasicDataSource dataSource = new BasicDataSource(); 
      dataSource.setDriverClassName(driverClassName); 
      dataSource.setUrl(url); 
      return dataSource; 
     } 
    } 
} 

예외 :

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'entityManagerFactory': Requested bean is currently in creation: Is there an unresolvable circular reference? 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:335) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:632) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:442) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:276) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

persistence-openshift.properties

################### DataSource Configuration ########################## 
jdbc.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect 

persistence-default.properties

################### DataSource Configuration ########################## 
jdbc.hibernate.dialect=org.hibernate.dialect.H2Dialect 
+0

왜 전체 구성을 복제합니까? 몇 가지 사항 만 다릅니다 (내가 작성한 [초기 스레드] (http://stackoverflow.com/questions/26529300/different-persistenceconfig-java-for-development-and-production/26529468#26529468)) . 또한'static' 필드에서'@ Autowired'는 작동하지 않을 것이고 하나의 메소드 만'@ PostConstruct'로 주석을 달 수 있다고 믿습니다. –

+0

복제 된 메소드는 모두 상위 클래스와 약간 다릅니다. 다르게 할 수 있습니까? 나는 이것이 다소 새로운 문제라고 생각하여 새로운 실을 만들었다. 정적이 아니라면 하위 클래스에서 autowired 클래스에 어떻게 액세스 할 수 있습니까? 스펙은 실제로 하나의 메소드가 @PostConstruct ...로 주석을 달 수 있다는 것을 나타내지 만 둘 다 실행되었습니다. – user672009

+0

그들은 다른 속성들만 다르지 않습니다. 속성 파일에 넣을 수있는 속성들입니다 (다른 스레드에서 설명했듯이). 당신이 필요로하는 유일한 것은 다른 데이터 소스이고 분명히 오픈 시프트 프로파일의 경우 초기화 프로그램을 실행하기를 원할 것입니다. 그런 다음 다른 구성에 bean을 삽입하십시오. –

답변

1

귀하의 구성은 다음과 같이 될 것이다. 사람들이 이미 공급 업체 어댑터를 사용하여 설정 한대로 additionalProperties 더 이상이 없는지

@Configuration 
@PropertySource("classpath:persistence-${envTarget:default}.properties") 
@EnableJpaRepositories(basePackages = {"dk.fitfit.campusfood.model", "dk.fitfit.campusfood.repository"}) 
public class PersistenceConfig { 
    private static final Logger logger = LoggerFactory.getLogger(PersistenceConfig.class); 

    @Autowired 
    private DataInitializer dataInitializer; 

    @Autowired 
    private Environment env; 

    private final String packagesToScan = "dk.fitfit.campusfood"; 


    public PersistenceConfig() { 
     logger.info("PersistenceConfig loaded!"); 
    } 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

    @Bean 
    public DataSource dataSource() { 
     return new EmbeddedDatabaseBuilder() 
      .setType(EmbeddedDatabaseType.H2) 
      .build(); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { 
     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setDataSource(dataSource); 
     factory.setPackagesToScan(packagesToScan); 
     factory.setJpaVendorAdapter(jpaVendorAdapter()); 
     return factory; 
    } 

    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() { 
     HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); 
     hibernateJpaVendorAdapter.setShowSql(true); 
     hibernateJpaVendorAdapter.setGenerateDdl(true); 
     hibernateJpaVendorAdapter.setDatabasePlatform(env.getRequiredProperty("jdbc.hibernate.dialect")); 
     return hibernateJpaVendorAdapter; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(emf); 
     return transactionManager; 
    } 

    @Profile("!openshift") 
    @Configuration 
    public static class DefaultPersistenceConfig { 
     @Bean 
     public DataSource dataSource() { 
      return new EmbeddedDatabaseBuilder() 
      .setType(EmbeddedDatabaseType.H2) 
      .build(); 
     } 
    } 

    // Activate this profile on openshift by running: rhc set-env JAVA_OPTS_EXT=-Dspring.profiles.active=openshift -a campusfood 
    @Configuration 
    @Profile("openshift") 
    public static class OpenShiftPersistenceConfig { 
     private static final Logger logger = LoggerFactory.getLogger(OpenShiftPersistenceConfig.class); 

     private String driverClassName = "org.postgresql.Driver"; 
     private String database = "campusfood"; 
     private String url = System.getenv("OPENSHIFT_POSTGRESQL_DB_URL") + "/" + database; 

     @PostConstruct 
     public void postConstructor()t 
     { 
      logger.info("OpenShiftPersistenceConfig loaded!"); 
     } 

     @Bean 
     public DataSource dataSource() 
     { 
      logger.info("dataSource()"); 
      BasicDataSource dataSource = new BasicDataSource(); 
      dataSource.setDriverClassName(driverClassName); 
      dataSource.setUrl(url); 
      return dataSource; 
     } 
    } 
} 

참고. 방언은 속성을 기반으로 설정되고 공급 업체 어댑터의 databasePlatform 속성을 사용하여 설정됩니다.

EntityManagerFactory에 필요한 의존성은 이제 메소드 서명의 일부이며, 필요할 때 Spring은이를 삽입합니다.

귀하의 패키지 토큰도 틀렸지만 패턴이 아니라 패키지 이름입니다.

DataInitializerEntityManagerFactory에 종속되면 순환 종속성이 있으므로 문제가 발생합니다. autowire하지 마시고, 무언가를 원한다면 주석이 달린 메소드를 DataInitializer에 추가하십시오.

+0

아직로드 할 수 없습니다! https://github.com/tonsV2/CampusFood/blob/master/src/main/java/dk/fitfit/campusfood/config/PersistenceConfig.java - 실마리가 있습니까? – user672009

+0

당신의 유닉스에서'.' 아마'spring.profiles.active' 대신에'SPRING_PROFILES_ACTIVE'를 시도해보십시오. –

+0

logger.info ("env. – user672009

관련 문제