title: Spring 3.1 configuration: environment not injected
body: <p>I am using the following for the spring 3.1 configuration: </p>
  
  <pre><code>@Configuration
  @EnableTransactionManagement
  public class DataConfig {
      @Inject
      private Environment env;
      @Inject
      private DataSource dataSource;
  
      // @Bean
      public SpringLiquibase liquibase() {
          SpringLiquibase b = new SpringLiquibase();
          b.setDataSource(dataSource);
          b.setChangeLog("classpath:META-INF/db-changelog-master.xml");
          b.setContexts("test, production");
          return b;
      }
  
      @Bean
      public EntityManagerFactory entityManagerFactory() {
          LocalContainerEntityManagerFactoryBean b = new LocalContainerEntityManagerFactoryBean();
          b.setDataSource(dataSource);
          HibernateJpaVendorAdapter h = new HibernateJpaVendorAdapter();
          h.setShowSql(env.getProperty("jpa.showSql", Boolean.class));
          h.setDatabasePlatform(env.getProperty("jpa.database"));
  
          b.setJpaVendorAdapter(h);
          return (EntityManagerFactory) b;
      }
  
      @Bean
      public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
          PersistenceExceptionTranslationPostProcessor b = new PersistenceExceptionTranslationPostProcessor();
          // b.setRepositoryAnnotationType(Service.class);
          // do this to make the persistence bean post processor pick up our @Service class. Normally
          // it only picks up @Repository
          return b;
  
      }
  
      @Bean
      public PlatformTransactionManager transactionManager() {
          JpaTransactionManager b = new JpaTransactionManager();
          b.setEntityManagerFactory(entityManagerFactory());
          return b;
      }
  
      /**
       * Allows repositories to access RDBMS data using the JDBC API.
       */
      @Bean
      public JdbcTemplate jdbcTemplate() {
          return new JdbcTemplate(dataSource);
      }
  
  
      @Bean(destroyMethod = "close")
      public DataSource dataSource() {
  
          BasicDataSource db = new BasicDataSource();
          if (env != null) {
              db.setDriverClassName(env.getProperty("jdbc.driverClassName"));
              db.setUsername(env.getProperty("jdbc.username"));
              db.setPassword(env.getProperty("jdbc.password"));
          } else {
              throw new RuntimeException("environment not injected");
          }
          return db;
      }
  }
  </code></pre>
  
  <p>the issue is that the variable <code>env</code> is not injected and is always null. </p>
  
  <p>I have not done anything about the Environment setup since I do not know if it's needed or how to. I looked at the greenhouse example and i did not find anything specifically for Environment. What should I do to make sure the <code>env</code> is injected?</p>
  
  <p>The related files:</p>
  
  <pre><code>// CoreConfig.java
  @Configuration
  public class CoreConfig {
  
      @Bean
      LocalValidatorFactoryBean validator() {
          return new LocalValidatorFactoryBean();
      }
  
      /**
       * Properties to support the 'standard' mode of operation.
       */
      @Configuration
      @Profile("standard")
      @PropertySource("classpath:META-INF/runtime.properties")
      static class Standard {
      }
  
  }
  
  
  // the Webconfig.java
  @Configuration
  @EnableWebMvc
  @EnableAsync
  // @EnableScheduling
  @EnableLoadTimeWeaving
  @ComponentScan(basePackages = "com.jfd", excludeFilters = { @Filter(Configuration.class) })
  @Import({ CoreConfig.class, DataConfig.class, SecurityConfig.class })
  @ImportResource({ "/WEB-INF/spring/applicationContext.xml" })
  public class WebConfig extends WebMvcConfigurerAdapter {
  
  
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry.addResourceHandler("/images/**").addResourceLocations(
                  "/images/");
      }
  
      @Bean
      public BeanNameViewResolver beanNameViewResolver() {
          BeanNameViewResolver b = new BeanNameViewResolver();
          b.setOrder(1);
          return b;
      }
  
      @Bean
      public InternalResourceViewResolver internalResourceViewResolver() {
          InternalResourceViewResolver b = new InternalResourceViewResolver();
          b.setSuffix(".jsp");
          b.setPrefix("/WEB-INF/jsp/");
          b.setOrder(2);
          return b;
      }
  
      @Bean
      public CookieLocaleResolver localeResolver() {
          CookieLocaleResolver b = new CookieLocaleResolver();
          b.setCookieMaxAge(100000);
          b.setCookieName("cl");
          return b;
      }
  
      // for messages
      @Bean
      public ResourceBundleMessageSource messageSource() {
          ResourceBundleMessageSource b = new ResourceBundleMessageSource();
          b.setBasenames(new String[] { "com/jfd/core/CoreMessageResources",
                  "com/jfd/common/CommonMessageResources",
                  "com/jfd/app/AppMessageResources",
                  "com/jfd/app/HelpMessageResources" });
          b.setUseCodeAsDefaultMessage(false);
          return b;
      }
  
      @Bean
      public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
          SimpleMappingExceptionResolver b = new SimpleMappingExceptionResolver();
  
          Properties mappings = new Properties();
          mappings.put("org.springframework.web.servlet.PageNotFound", "p404");
          mappings.put("org.springframework.dao.DataAccessException",
                  "dataAccessFailure");
          mappings.put("org.springframework.transaction.TransactionException",
                  "dataAccessFailure");
          b.setExceptionMappings(mappings);
          return b;
      }
  
      /**
       * ViewResolver configuration required to work with Tiles2-based views.
       */
      @Bean
      public ViewResolver viewResolver() {
          UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
          viewResolver.setViewClass(TilesView.class);
          return viewResolver;
      }
  
      /**
       * Supports FileUploads.
       */
      @Bean
      public MultipartResolver multipartResolver() {
          CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
          multipartResolver.setMaxUploadSize(500000);
          return multipartResolver;
      }
  
      // for configuration
      @Bean
      public CompositeConfigurationFactoryBean myconfigurations()
              throws ConfigurationException {
          CompositeConfigurationFactoryBean b = new CompositeConfigurationFactoryBean();
          PropertiesConfiguration p = new PropertiesConfiguration(
                  "classpath:META-INF/app-config.properties");
          p.setReloadingStrategy(new FileChangedReloadingStrategy());
  
          b.setConfigurations(new org.apache.commons.configuration.Configuration[] { p });
          b.setLocations(new ClassPathResource[] { new ClassPathResource(
                  "META-INF/default-config.properties") });
          return b;
      }
  
      @Bean
      org.apache.commons.configuration.Configuration configuration()
              throws ConfigurationException {
          return myconfigurations().getConfiguration();
      }
  
  
  // and the SecurityConfig.java
  @Configuration
  @ImportResource({ "/WEB-INF/spring/applicationContext-security.xml" })
  public class SecurityConfig {
  
      @Bean
      public BouncyCastleProvider bcProvider() {
          return new BouncyCastleProvider();
      }
  
      @Bean
      public PasswordEncryptor jasyptPasswordEncryptor() {
  
          ConfigurablePasswordEncryptor b = new ConfigurablePasswordEncryptor();
          b.setAlgorithm("xxxxxx");
          return b;
      }
  
      @Bean
      public PasswordEncoder passwordEncoder() {
          PasswordEncoder b = new org.jasypt.spring.security3.PasswordEncoder();
          b.setPasswordEncryptor(jasyptPasswordEncryptor());
          return b;
      }
  
  }
  </code></pre>
  
  <p>in the applicationcontext.xml, it only imported two xmls to config cache and cassandra, so it may not be important.</p>