簡體   English   中英

如何在Java類中使用@Bean配置數據源

[英]How to configure Datasource using @Bean in Java class

我正在按照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,應該如何編輯代碼?

感謝大伙們

如果要使用spring配置SessionFactory,則可以創建所需的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;
 }

這是示例鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM