Bladeren bron

新增注解式数据源和mybatis配置

zh.sqy 9 jaren geleden
bovenliggende
commit
b4acf665c6

+ 42 - 0
hsweb-web-dao-impl-mybatis/src/main/java/org/hsweb/web/dao/impl/mybatis/config/DataBaseConfiguration.java

@@ -0,0 +1,42 @@
+package org.hsweb.web.dao.impl.mybatis.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.mybatis.spring.annotation.MapperScan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.sql.DataSource;
+
+/**
+ * Created by 浩 on 2016-01-22 0022.
+ */
+@Configuration
+@EnableTransactionManagement
+@MapperScan(basePackages = "org.hsweb.web.dao", sqlSessionFactoryRef = "sqlSessionFactory")
+public class DataBaseConfiguration implements EnvironmentAware {
+    private RelaxedPropertyResolver propertyResolver;
+
+    private Logger log = LoggerFactory.getLogger(this.getClass());
+
+    @Override
+    public void setEnvironment(Environment env) {
+        this.propertyResolver = new RelaxedPropertyResolver(env, "jdbc.");
+    }
+
+    @Bean(name = "dataSource", destroyMethod = "close", initMethod = "init")
+    public DataSource writeDataSource() {
+        log.debug("Configruing  DataSource");
+        DruidDataSource datasource = new DruidDataSource();
+        datasource.setUrl(propertyResolver.getProperty("url"));
+        datasource.setDriverClassName(propertyResolver.getProperty("driverClassName"));
+        datasource.setUsername(propertyResolver.getProperty("username"));
+        datasource.setPassword(propertyResolver.getProperty("password"));
+        return datasource;
+    }
+}

+ 69 - 0
hsweb-web-dao-impl-mybatis/src/main/java/org/hsweb/web/dao/impl/mybatis/config/MybatisConfiguration.java

@@ -0,0 +1,69 @@
+package org.hsweb.web.dao.impl.mybatis.config;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.core.env.Environment;
+import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+
+/**
+ * 获取第二个数据库的连接信息,在application.yml中配置,并指定特定的前缀
+ */
+@Configuration
+@ConditionalOnClass({EnableTransactionManagement.class})
+@AutoConfigureAfter({DataBaseConfiguration.class})
+@MapperScan(basePackages = {"org.hsweb.web.dao"})
+@EnableAspectJAutoProxy(proxyTargetClass = true)
+public class MybatisConfiguration implements EnvironmentAware {
+    private static Log logger = LogFactory.getLog(MybatisConfiguration.class);
+
+    private RelaxedPropertyResolver propertyResolver;
+
+    @Resource(name = "dataSource")
+    private DataSource dataSource;
+
+    @Override
+    public void setEnvironment(Environment environment) {
+        this.propertyResolver = new RelaxedPropertyResolver(environment, "mybatis.");
+    }
+
+    @Bean
+    @ConditionalOnMissingBean
+    public SqlSessionFactory sqlSessionFactory() {
+        try {
+            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+            sessionFactory.setDataSource(dataSource);
+            sessionFactory.setTypeAliasesPackage(propertyResolver.getProperty("typeAliasesPackage"));
+            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(propertyResolver.getProperty("mapperLocations")));
+            sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(propertyResolver.getProperty("configLocation")));
+            return sessionFactory.getObject();
+        } catch (Exception e) {
+            logger.error("Could not confiure mybatis session factory", e);
+            return null;
+        }
+    }
+
+
+
+    @Bean
+    @ConditionalOnMissingBean
+    public DataSourceTransactionManager transactionManager() {
+        return new DataSourceTransactionManager(dataSource);
+    }
+}