Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Text
Posted by: ture ture
Added: Apr 7, 2018 9:53 PM
Modified: Apr 7, 2018 9:54 PM
Views: 11
Tags: no tags
  1. package com.websystique.springmvc.configuration;
  2.  
  3. import java.util.Properties;
  4.  
  5. import javax.sql.DataSource;
  6.  
  7. import org.hibernate.SessionFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.ComponentScan;
  11. import org.springframework.context.annotation.Configuration;
  12. import org.springframework.context.annotation.PropertySource;
  13. import org.springframework.core.env.Environment;
  14. import org.springframework.jdbc.datasource.DriverManagerDataSource;
  15. import org.springframework.orm.hibernate4.HibernateTransactionManager;
  16. import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
  17. import org.springframework.transaction.annotation.EnableTransactionManagement;
  18.  
  19. @Configuration
  20. @EnableTransactionManagement
  21. @ComponentScan({ "com.websystique.springmvc.configuration" })
  22. @PropertySource(value = { "classpath:application.properties" })
  23. public class HibernateConfiguration {
  24.  
  25.     @Autowired
  26.     private Environment environment;
  27.  
  28.     @Bean
  29.     public LocalSessionFactoryBean sessionFactory() {
  30.         LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
  31.         sessionFactory.setDataSource(dataSource());
  32.         sessionFactory.setPackagesToScan(new String[] { "com.websystique.springmvc.model" });
  33.         sessionFactory.setHibernateProperties(hibernateProperties());
  34.         return sessionFactory;
  35.      }
  36.      
  37.     @Bean
  38.     public DataSource dataSource() {
  39.         DriverManagerDataSource dataSource = new DriverManagerDataSource();
  40.         dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
  41.         dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
  42.         dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
  43.         dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
  44.         return dataSource;
  45.     }
  46.      
  47.     private Properties hibernateProperties() {
  48.         Properties properties = new Properties();
  49.         properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
  50.         properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
  51.         properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
  52.         return properties;        
  53.     }
  54.      
  55.     @Bean
  56.     @Autowired
  57.     public HibernateTransactionManager transactionManager(SessionFactory s) {
  58.        HibernateTransactionManager txManager = new HibernateTransactionManager();
  59.        txManager.setSessionFactory(s);
  60.        return txManager;
  61.     }
  62. }
  63.  
  64.  
  65.  
  66. @Configurationindica che questa classe contiene uno o più metodi di bean annotati con la @Beanproduzione di bean gestibili dal contenitore spring. Nel nostro caso, questa classe rappresenta la configurazione di ibernazione.
  67. @ComponentScanè equivalente a context:component-scan base-package="..."in xml, fornendo dove cercare i bean / classi gestiti a molla.
  68. @EnableTransactionManagementè equivalente a Spring's tx: * XML namespace, che abilita la capacità di gestione delle transazioni guidata da Spring.
  69. @PropertySourceviene utilizzato per dichiarare un set di proprietà (definito in un file di proprietà nel percorso di classe dell'applicazione) in Spring run-time Environment, fornendo flessibilità per avere valori diversi in diversi ambienti applicativi.
  70.  
  71. Il metodo sessionFactory()sta creando un LocalSessionFactoryBean, che rispecchia esattamente la configurazione basata su XML: Abbiamo bisogno di un dataSource e di proprietà di ibernazione (come hibernate.properties). Grazie a @PropertySource, possiamo esternare i valori reali in un file .properties e utilizzare Spring's Environmentper recuperare il valore corrispondente a un elemento. Una volta che SessionFactory è stato creato, verrà iniettato nel metodo Bean transactionManagerche potrebbe eventualmente fornire il supporto delle transazioni per le sessioni create da sessionFactory.
  72.  
  73. Di seguito è riportato il file delle proprietà utilizzato in questo post.
  74. /src/main/resources/application.properties
  75.  
  76.  
  77.  
  78. jdbc.driverClassName = com.mysql.jdbc.Driver
  79. jdbc.url = jdbc:mysql://localhost:3306/websystique
  80. jdbc.username = myuser
  81. jdbc.password = mypassword
  82. hibernate.dialect = org.hibernate.dialect.MySQLDialect
  83. hibernate.show_sql = true
  84. hibernate.format_sql = true
  85.  
  86.