浏览代码

saas测试初步添加

demon 8 年之前
父节点
当前提交
f629337a13

+ 8 - 0
src/main/java/com/yihu/hos/common/constants/ContextAttributes.java

@ -0,0 +1,8 @@
package com.yihu.hos.common.constants;
/**
 * @created Airhead 2016/11/14.
 */
public interface ContextAttributes {
    String SCHEMA = "schema";
}

+ 144 - 2
src/main/java/com/yihu/hos/config/BeanConfig.java

@ -9,7 +9,149 @@ import org.springframework.context.annotation.ImportResource;
 * Created at 2016/8/5.
 */
@Configuration
@ImportResource({"classpath:spring/applicationContext.xml"}) //����xml������
public class BeanConfig {
//@EnableTransactionManagement
//@ComponentScan("com.yihu.hos")
@ImportResource({"classpath:spring/applicationContext.xml"}) //applicationContext相关bean创建
public class BeanConfig{
//    private Environment environment;
//    private RelaxedPropertyResolver datasourcePropertyResolver;
//    private RelaxedPropertyResolver hibernatePropertyResolver;
//
//
//    //从application.yml中读取资源
//    @Override
//    public void setEnvironment(Environment environment) {
//        this.environment = environment;
//        this.datasourcePropertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource.");
//        this.hibernatePropertyResolver = new RelaxedPropertyResolver(environment, "spring.jpa.");
//
//    }
//
//    //datasource 池方式
////    @Bean(initMethod = "init", destroyMethod = "close")
////    public DataSource dataSource() throws SQLException {
////        if (StringUtils.isEmpty(datasourcePropertyResolver.getProperty("url"))) {
////            System.out.println("Your database connection pool configuration is incorrect!" +
////                    " Please check your Spring profile, current profiles are:"+
////                    Arrays.toString(environment.getActiveProfiles()));
////            throw new ApplicationContextException(
////                    "Database connection pool is not configured correctly");
////        }
////        DruidDataSource druidDataSource = new DruidDataSource();
////        druidDataSource.setUrl(datasourcePropertyResolver.getProperty("url"));
////        druidDataSource.setUsername(datasourcePropertyResolver
////                .getProperty("username"));
////        druidDataSource.setPassword(datasourcePropertyResolver
////                .getProperty("password"));
////        druidDataSource.setInitialSize(1);
////        druidDataSource.setMinIdle(1);
////        druidDataSource.setMaxActive(20);
////        druidDataSource.setMaxWait(60000);
////        druidDataSource.setTimeBetweenEvictionRunsMillis(60000);
////        druidDataSource.setMinEvictableIdleTimeMillis(300000);
////        druidDataSource.setValidationQuery("SELECT 'x'");
////        druidDataSource.setTestWhileIdle(true);
////        druidDataSource.setTestOnBorrow(false);
////        druidDataSource.setTestOnReturn(false);
////        return druidDataSource;
////    }
//
//    @Bean( destroyMethod = "close")
//    public BasicDataSource dataSource() throws SQLException {
//        if (StringUtils.isEmpty(datasourcePropertyResolver.getProperty("url"))) {
//            System.out.println("Your database connection pool configuration is incorrect!" +
//                    " Please check your Spring profile, current profiles are:"+
//                    Arrays.toString(environment.getActiveProfiles()));
//            throw new ApplicationContextException(
//                    "Database connection pool is not configured correctly");
//        }
//        BasicDataSource dataSource = new BasicDataSource();
//        dataSource.setUrl(datasourcePropertyResolver.getProperty("url"));
//        dataSource.setUsername(datasourcePropertyResolver.getProperty("username"));
//        dataSource.setPassword(datasourcePropertyResolver.getProperty("password"));
//        dataSource.setInitialSize(datasourcePropertyResolver.getProperty("initial-size", Integer.class));
//        dataSource.setMaxTotal(datasourcePropertyResolver.getProperty("max-total", Integer.class));
//        dataSource.setMinIdle(datasourcePropertyResolver.getProperty("min-idle",Integer.class));
//        dataSource.setMaxIdle(datasourcePropertyResolver.getProperty("max-idle",Integer.class));
//        dataSource.setValidationQuery(datasourcePropertyResolver.getProperty("validation-query"));
//        dataSource.setRemoveAbandonedTimeout(55);
//        dataSource.setTestOnBorrow(datasourcePropertyResolver.getProperty("test-on-borrow",Boolean.class));
//        return dataSource;
//    }
//
//    //sessionFactory
//    @Bean
//    public LocalSessionFactoryBean sessionFactory() throws SQLException {
//        LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
//        localSessionFactoryBean.setDataSource(this.dataSource());
//        Properties properties1 = new Properties();
//        properties1.setProperty("hibernate.dialect",hibernatePropertyResolver.getProperty("hibernate.dialect"));
//        properties1.setProperty("hibernate.show_sql",hibernatePropertyResolver.getProperty("show-sql"));
//        properties1.setProperty("hibernate.format_sql",hibernatePropertyResolver.getProperty("format-sql"));
//        localSessionFactoryBean.setHibernateProperties(properties1);
//        localSessionFactoryBean.setPackagesToScan("com.yihu.hos.standard.model");
//        ResourceLoader resourceLoader = new DefaultResourceLoader();
//        Resource resource = resourceLoader.getResource("classpath:resource/");
//        localSessionFactoryBean.setMappingDirectoryLocations(resource);
////        localSessionFactoryBean.setPackagesToScan("*");
//        return localSessionFactoryBean;
//    }
//
//    //txManager事务开启
//    @Bean
//    public HibernateTransactionManager txManager() throws SQLException {
//        HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager();
//        hibernateTransactionManager.setSessionFactory(sessionFactory().getObject());
//        return hibernateTransactionManager;
//    }
//
//    //文经上传
//    @Bean
//    public CommonsMultipartResolver multipartResolver(){
//        return new CommonsMultipartResolver();
//    }
//
//    //国际化配置
//    @Bean
//    public ResourceBundleMessageSource messageSource(){
//        ResourceBundleMessageSource messageSource =new ResourceBundleMessageSource();
//        messageSource.setBasenames("text/message");
//        messageSource.setDefaultEncoding("UTF-8");
//        return messageSource;
//    }
//
//    @Bean
//    public CookieLocaleResolver localeResolver(){
//        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
//        localeResolver.setCookieName("Language");
//        localeResolver.setCookieMaxAge(604800);
//        localeResolver.setDefaultLocale(new Locale("zh_CN"));
//        return localeResolver;
//    }
//
//    @Bean
//    public LocaleChangeInterceptor localeChangeInterceptor(){
//        return new LocaleChangeInterceptor();
//    }
//
//    @Bean
//    public JdbcTemplate jdbcTemplate(){
//        JdbcTemplate jdbcTemplate = new JdbcTemplate();
//        try {
//            jdbcTemplate.setDataSource(this.dataSource());
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//        return jdbcTemplate;
//    }
//
//    //Hibernate模版配置
//    @Bean
//    public HibernateTemplate hibernateTemplate() throws SQLException {
//        HibernateTemplate hibernateTemplate = new HibernateTemplate();
//        hibernateTemplate.setSessionFactory(this.sessionFactory().getObject());
//        return hibernateTemplate;
//    }
}

+ 46 - 0
src/main/java/com/yihu/hos/interceptor/AuditInterceptor.java

@ -0,0 +1,46 @@
package com.yihu.hos.interceptor;
import com.yihu.hos.common.constants.ContextAttributes;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.EmptyInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Iterator;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/11/30.
 */
@Component
public class AuditInterceptor extends EmptyInterceptor {
    private static final long serialVersionUID = 1L;
    private static Logger logger = LoggerFactory.getLogger(AuditInterceptor.class);
    @Override
    public String onPrepareStatement(String sql) {
        String schemaName = getSchema();
        String completeSql = sql;
        if (StringUtils.isNotEmpty(schemaName)) {
            String myCatAnnotation = "/*#mycat:schema=" + schemaName + "*/ ";
            completeSql = myCatAnnotation + sql;
        }
        logger.info("prepare " + completeSql);
        return super.onPrepareStatement(completeSql);
    }
    @Override
    public void preFlush(Iterator entities) {
        System.out.println("preflush..............");
        super.preFlush(entities);
    }
    private String getSchema() {
        return LocalContext.getContext().getAttachment(ContextAttributes.SCHEMA);
    }
}

+ 60 - 0
src/main/java/com/yihu/hos/interceptor/LocalContext.java

@ -0,0 +1,60 @@
package com.yihu.hos.interceptor;
import java.util.HashMap;
import java.util.Map;
/**
 * @created Airhead 2016/11/14.
 */
public class LocalContext {
    private static final ThreadLocal<LocalContext> LOCAL = new ThreadLocal<LocalContext>() {
        protected LocalContext initialValue() {
            return new LocalContext();
        }
    };
    private final Map<String, String> attachments = new HashMap<>();
    public static LocalContext getContext() {
        return LOCAL.get();
    }
    public static void removeContext() {
        LOCAL.remove();
    }
    public String getAttachment(String key) {
        return (String) this.attachments.get(key);
    }
    public LocalContext setAttachment(String key, String value) {
        if (value == null) {
            this.attachments.remove(key);
        } else {
            this.attachments.put(key, value);
        }
        return this;
    }
    public LocalContext removeAttachment(String key) {
        this.attachments.remove(key);
        return this;
    }
    public Map<String, String> getAttachments() {
        return this.attachments;
    }
    public LocalContext setAttachments(Map<String, String> attachment) {
        this.attachments.clear();
        if (attachment != null && attachment.size() > 0) {
            this.attachments.putAll(attachment);
        }
        return this;
    }
    public void clearAttachments() {
        this.attachments.clear();
    }
}

+ 7 - 1
src/main/resources/spring/applicationContext.xml

@ -49,9 +49,15 @@
        <property name="removeAbandonedTimeout" value="55"/>
    </bean>
    <bean id="cacheIntercepter" class="com.yihu.hos.interceptor.AuditInterceptor" />
    <!--Hibernate 会话管理器配置-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="entityInterceptor">
            <ref bean="cacheIntercepter"/>
        </property>
        <property name="packagesToScan">
            <list>
                <!-- 可以加多个包 -->
@ -61,7 +67,7 @@
        <property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
                hibernate.show_sql=false
                hibernate.show_sql=true
                hibernate.format_sql=true
            </value>
        </property>