Как настроить источник данных с использованием @Bean в классе Java - PullRequest
0 голосов
/ 29 августа 2018

Я следую примеру из книги Spring, чтобы создать небольшое приложение для интернет-магазина.

В примере используется встроенная база данных hsqldb , но я не хочу ее использовать.

Я хочу подключиться к MySQL базе данных и позже использовать Hibernate sessionFractory .

Я отредактировал пример кода следующим образом:

@Configuration
@ComponentScan("com.packagename.webstore")
public class RootApplicationContextConfig {

    @Bean 
    public DataSource dataSource() { 
       // this is the original code of the example
      /*EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
        EmbeddedDatabase db = builder 
                .setType(EmbeddedDatabaseType.HSQL) 
                .addScript("db/sql/create-table.sql") 
                .addScript("db/sql/insert-data.sql") 
                .build(); 
        return db; */

          //this is my code
          DriverManagerDataSource dataSource = new DriverManagerDataSource();
          dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
          dataSource.setUrl("jdbc:mysql://localhost:3306/dbName");
          dataSource.setUsername( "user" );
          dataSource.setPassword( "pass" );
          return dataSource;
    } 

}

Затем в моих классах я получаю доступ к источнику данных следующим образом:

@Autowired
private DataSource datasource;    
...
Connection connection  = datasource.getConnection();
...

Это правильно, что я сделал?

Если позже я захочу использовать Hibernate sessionFactory, как мне отредактировать мой код?

Спасибо, ребята

1 Ответ

0 голосов
/ 29 августа 2018

Если вы хотите настроить SessionFactory с помощью spring, тогда создайте необходимые bean-компоненты, как показано ниже

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.baeldung.spring.persistence" })
public class PersistenceConfig {

   @Autowired
   private Environment env;

   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(
        new String[] { "entity class package name so it can scan them" });
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
      dataSource.setUrl(env.getProperty("jdbc.url"));
      dataSource.setUsername(env.getProperty("jdbc.user"));
      dataSource.setPassword(env.getProperty("jdbc.pass"));

      return dataSource;
   }

   @Bean
   @Autowired
   public HibernateTransactionManager transactionManager(
     SessionFactory sessionFactory) {

      HibernateTransactionManager txManager
       = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory);

      return txManager;
   }

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
      return new PersistenceExceptionTranslationPostProcessor();
   }

   Properties hibernateProperties() {
      return new Properties() {
         {
            setProperty("hibernate.hbm2ddl.auto",
              env.getProperty("hibernate.hbm2ddl.auto"));
            setProperty("hibernate.dialect",
              env.getProperty("hibernate.dialect"));
            setProperty("hibernate.globally_quoted_identifiers",
             "true");
         }
      };
   }
}

файл свойств

# jdbc confi
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate_dev?createDatabaseIfNotExist=true
jdbc.user=tutorialuser
jdbc.pass=tutorialmy5ql

# hibernate config
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop

тогда вы можете вместе с Datasource или SessionFactory в вашем обязательном классе

public  class HibernateDAO{

   @Autowired
   SessionFactory sessionFactory;

@Autowired
   DataSource datasource;
 }

Вот пример ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...