0

@Autowired Environment env - always null.This is my HibernateConf.java:

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:hibernate.properties" })
public class HibernateConf{

    @Autowired
    private Environment env;

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[]{"Enteties"});
        sessionFactory.setHibernateProperties(hibernateProperties());

        return sessionFactory;
    }

    @Bean
    public DataSource dataSource() {
        final BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("com.mysql.cj.jdbc.Driver")));
        dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc:mysql://localhost:3306/tutorialdb?createDatabaseIfNotExist=true")));
        dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("root")));
        dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("9339")));
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager hibernateTransactionManager() {
        final HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }

    private final Properties hibernateProperties() {
        final Properties hibernateProperties = new Properties();
        hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("create-drop"));
        hibernateProperties.setProperty("hibernate.dialect", env.getProperty("org.hibernate.dialect.MySQL5Dialect"));

        return hibernateProperties;
    }
}

So the main problem it is that this @Autowired private Environment env; always NPE but I don't know why because every example of this config class is the same as mine. How can I fix it?

halfer
  • 19,824
  • 17
  • 99
  • 186

1 Answers1

0

(Posted on behalf of the question author to move it from the question to the answer space).

I found the solution to this problem. First you need to remove @Autowired private Environment env; and second dataSource.setPassword("9339") use it just with String parameters.

Thirdly, you need to have not 5.0...mysql-connector not 4.0... but this one:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.17</version>
</dependency> 
halfer
  • 19,824
  • 17
  • 99
  • 186