整合多数据源(待完善)

This commit is contained in:
xiangwbs
2018-06-02 10:10:44 +08:00
parent bd3f19162a
commit 76de32261d
12 changed files with 132 additions and 43 deletions

View File

@@ -1,27 +1,73 @@
package com.xwbing.datasource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
/**
* 项目名称: boot-module-demo
* 创建时间: 2018/5/31 21:38
* 作者: xiangwb
* 说明:
* 说明: JpaDataSourceConfig
*/
@Configuration
@PropertySource("classpath:druid.properties")
@EnableJpaRepositories(
entityManagerFactoryRef = "jpaEntityManagerFactory",
transactionManagerRef = "jpaTransactionManager",
basePackages = {"com.xwbing.domain.repository"})
public class JpaDataSourceConfig {
@Bean(name="")
@Primary
@ConfigurationProperties("db1")
public DataSource primaryDataSource() {
@Resource
private JpaProperties jpaProperties;
@Bean(name = "jpaDataSource")
@ConfigurationProperties("db2")
public DataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "jpaEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource())
.properties(getProperties(dataSource()))
.packages("com.xwbing.domain.entity")
.persistenceUnit("jpaPersistenceUnit")
.build();
}
@Bean(name = "japEntityManager")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactory(builder).getObject().createEntityManager();
}
@Bean(name = "jpaTransactionManager")
public PlatformTransactionManager dataSourceTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactory(builder).getObject());
}
/**
* 获取jpa配置信息
*
* @param dataSource
* @return
*/
private Map<String, String> getProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
}

View File

@@ -4,31 +4,30 @@ import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
/**
* 说明: 德鲁伊数据源配置。监控地址:datasource/index.html
* 说明: MybatisDataSourceConfig
* 项目名称: boot-module-demo
* 创建时间: 2017/12/10 16:36
* 作者: xiangwb
*/
@Configuration
@MapperScan(basePackages = "", sqlSessionFactoryRef = "mybatisSqlSessionFactory")
@MapperScan(basePackages = {"com.xwbing.domain.mapper"}, sqlSessionFactoryRef = "mybatisSqlSessionFactory")
@PropertySource("classpath:druid.properties")
public class MybatisDataSourceConfig {
private final Logger logger = LoggerFactory.getLogger(MybatisDataSourceConfig.class);
@Primary
@Bean(name = "mybatisDatasource")
@ConfigurationProperties("db2")
@ConfigurationProperties("db1")
public DataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}
@@ -37,12 +36,15 @@ public class MybatisDataSourceConfig {
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.xwbing.domain.entity");
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Primary
@Bean(name = "mybatisTransactionManager")
public DataSourceTransactionManager dataSourceTransactionManager() {
public PlatformTransactionManager dataSourceTransactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}

View File

@@ -48,7 +48,8 @@ public class SysUser extends BaseEntity {
@ApiModelProperty(value = "密码",hidden = true)
private String password;
@ApiModelProperty(value = "是否为管理员",hidden = true)
private String admin;
@Column(name = "is_admin")
private String isAdmin;
//临时字段
@ApiModelProperty(hidden = true)
private transient String create;

View File

@@ -0,0 +1,17 @@
package com.xwbing.domain.mapper;
import com.xwbing.domain.entity.sys.SysUser;
import java.util.List;
/**
* 项目名称: boot-module-demo
* 创建时间: 2018/6/1 21:50
* 作者: xiangwb
* 说明:
*/
public interface SysUserMapper {
// @Select("select * from sys_user_info")
List<SysUser> findall();
int save(SysUser sysUser);
}

View File

@@ -67,7 +67,7 @@ public class SysUserService {
sysUser.setSalt(res[1]);
sysUser.setPassword(res[2]);
// 设置为非管理员
sysUser.setAdmin(CommonEnum.YesOrNoEnum.NO.getCode());
sysUser.setIsAdmin(CommonEnum.YesOrNoEnum.NO.getCode());
SysUser one = sysUserRepository.save(sysUser);
if (one == null) {
throw new BusinessException("新增用户失败");
@@ -98,7 +98,7 @@ public class SysUserService {
if (old.getUserName().equals(userName)) {
throw new BusinessException("不能删除当前登录用户");
}
if (CommonEnum.YesOrNoEnum.YES.getCode().equals(old.getAdmin())) {
if (CommonEnum.YesOrNoEnum.YES.getCode().equals(old.getIsAdmin())) {
throw new BusinessException("不能对管理员进行删除操作");
}
//删除用户
@@ -131,7 +131,7 @@ public class SysUserService {
if (old.getUserName().equals(userName)) {
throw new BusinessException("不能修改当前登录用户");
}
if (CommonEnum.YesOrNoEnum.YES.getCode().equals(old.getAdmin())) {
if (CommonEnum.YesOrNoEnum.YES.getCode().equals(old.getIsAdmin())) {
throw new BusinessException("不能对管理员进行修改操作");
}
// 根据实际情况补充
@@ -209,7 +209,7 @@ public class SysUserService {
if (old.getUserName().equals(userName)) {
throw new BusinessException("不能重置当前登录用户");
}
if (CommonEnum.YesOrNoEnum.YES.getCode().equals(old.getAdmin())) {
if (CommonEnum.YesOrNoEnum.YES.getCode().equals(old.getIsAdmin())) {
throw new BusinessException("管理员密码不能重置");
}
//生成密码
@@ -411,7 +411,7 @@ public class SysUserService {
UserDto temp;
for (SysUser info : list) {
temp = new UserDto();
temp.setIsAdmin(CommonEnum.YesOrNoEnum.YES.getCode().equals(info.getAdmin()) ? "" : "");
temp.setIsAdmin(CommonEnum.YesOrNoEnum.YES.getCode().equals(info.getIsAdmin()) ? "" : "");
temp.setMail(info.getMail());
temp.setName(info.getName());
temp.setSex(Integer.valueOf(info.getSex()) == 1 ? "" : "");

View File

@@ -27,7 +27,7 @@ db1.filters=stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
db1.connect-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#datasource.useGlobalDataSourceStat=true
#db1.useGlobalDataSourceStat=true
##WebStatFilter配置###################################
db1.web-stat-filter.enabled=false
db1.web-stat-filter.url-pattern=/*
@@ -51,33 +51,22 @@ db1.stat-view-servlet.allow=
#IP黑名单(存在共同时,deny优先于allow)
db1.stat-view-servlet.deny=
###########################################################################################################
##jdbc配置#####################################
db2.driver-class-name=com.mysql.jdbc.Driver
db2.url=jdbc:mysql://127.0.0.1:3306/xwbing?useUnicode=true&characterEncoding=utf8&useSSL=false
db2.username=root
db2.password=xwbing
##连接池配置###############################
# 初始化大小,最小,最大
db2.initial-size=1
db2.min-idle=3
db2.max-active=20
# 获取连接最大等待时间
db2.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
db2.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
db2.min-evictable-idle-time-millis=30000
# 连接性能检测(用来检测连接是否有效的sql,为nulltestOnBorrow、testOnReturn、testWhileIdle都不会起作用)
db2.validation-query=SELECT 'x'
db2.test-while-idle=true
druid.db2.test-on-borrow=false
db2.test-on-return=false
# 打开PSCache并且指定每个连接上PSCache的大小 ,mysql5.5以下的版本中没有PSCache功能建议关闭掉
db2.pool-prepared-statements=true
db2.max-pool-prepared-statement-per-connection-size=20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙,防止sql注入
db2.filters=stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
db2.connect-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#datasource.useGlobalDataSourceStat=true
#db2.useGlobalDataSourceStat=true

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xwbing.domain.mapper.SysUserMapper">
<resultMap id="BaseResultMap" type="sysUser">
<id column="id" property="id"/>
<result column="create_time" property="createTime"/>
<result column="modified_time" property="modifiedTime"/>
<result column="user_name" property="userName"/>
<result column="is_admin" property="isAdmin"/>
</resultMap>
<sql id="Base_Column_List">
user_id, user_name, password, phone
</sql>
<insert id="save" parameterType="com.xwbing.domain.entity.sys.SysUser" >
<selectKey keyProperty="id" resultType="string" order="BEFORE">
SELECT UUID()
</selectKey>
INSERT INTO sys_user_info(id,name,user_name,mail,is_admin,sex,create_time,modified_time) VALUES
(#{id},#{name},#{userName},#{mail},#{isAdmin},#{sex},now(),now())
</insert>
<select id="findall" resultMap="BaseResultMap">
select *
from sys_user_info
</select>
</mapper>

View File

@@ -2,7 +2,6 @@ package com.xwbing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* 项目名称: boot-module-demo
@@ -10,9 +9,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
* 作者: boot-module-demo
* 说明: 启动类
*/
//@EnableRabbit
@SpringBootApplication
@EnableTransactionManagement
//@Configuration 定义为配置类,相当于xml文件中的<beans></beans>
//@ComponentScan 组件扫描
//@EnableAutoConfiguration 借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器

View File

@@ -3,7 +3,10 @@ package com.xwbing.controller.rest;
import com.alibaba.fastjson.JSONObject;
import com.xwbing.annotation.LogInfo;
import com.xwbing.domain.entity.ExpressInfo;
import com.xwbing.domain.entity.sys.SysUser;
import com.xwbing.domain.entity.vo.ExpressInfoVo;
import com.xwbing.domain.mapper.SysUserMapper;
import com.xwbing.exception.BusinessException;
import com.xwbing.rabbit.Sender;
import com.xwbing.redis.RedisService;
import com.xwbing.service.rest.CookieSessionService;
@@ -16,6 +19,7 @@ import com.xwbing.util.RestMessage;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -46,7 +50,14 @@ public class TestControl {
private CookieSessionService cookieSessionService;
@Resource
private Sender sender;
@Resource
private SysUserMapper sysUserMapper;
@Transactional
@PostMapping("save")
public void save(@RequestBody SysUser sysUser) {
int save = sysUserMapper.save(sysUser);
System.out.println("shiwi");
}
@GetMapping("send")
public void sendM(@RequestParam String[] msg) {
sender.sendM(msg);

View File

@@ -162,7 +162,7 @@ public class SysUserControl {
List<SysAuthority> button = new ArrayList<>();
List<SysAuthority> menu = new ArrayList<>();
List<SysAuthority> list;
if (CommonEnum.YesOrNoEnum.YES.getCode().equalsIgnoreCase(sysUser.getAdmin())) {
if (CommonEnum.YesOrNoEnum.YES.getCode().equalsIgnoreCase(sysUser.getIsAdmin())) {
list = sysAuthorityService.listByEnable(CommonEnum.YesOrNoEnum.YES.getCode());
} else {
list = sysUserService.listAuthorityByIdAndEnable(sysUser.getId(), CommonEnum.YesOrNoEnum.YES.getCode());
@@ -195,7 +195,7 @@ public class SysUserControl {
if (old == null) {
return JsonResult.toJSONObj("该用户不存在");
}
if (CommonEnum.YesOrNoEnum.YES.getCode().equalsIgnoreCase(old.getAdmin())) {
if (CommonEnum.YesOrNoEnum.YES.getCode().equalsIgnoreCase(old.getIsAdmin())) {
return JsonResult.toJSONObj("不能对管理员进行操作");
}
String[] ids = roleIds.split(",");

View File

@@ -83,7 +83,7 @@ public class UrlPermissionsInterceptor extends HandlerInterceptorAdapter {
String userName = (String) CommonDataUtil.getData(token);
SysUser user = sysUserService.getByUserName(userName);
List<SysAuthority> sysAuthorities;
if (CommonConstant.IS_ENABLE.equalsIgnoreCase(user.getAdmin())) {
if (CommonConstant.IS_ENABLE.equalsIgnoreCase(user.getIsAdmin())) {
sysAuthorities = sysAuthorityService.listByEnable(CommonEnum.YesOrNoEnum.YES.getCode());
} else {
sysAuthorities = sysUserService.listAuthorityByIdAndEnable(user.getId(), "Y");

View File

@@ -7,7 +7,6 @@ server:
#spring
spring:
#datasource
# datasource:
# driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://127.0.0.1:3306/springboot2?useUnicode=true&characterEncoding=utf8
@@ -61,8 +60,9 @@ spring:
size: 1
#mybatis
mybatis:
mapper-locations:
config-location:
mapper-locations: #classpath:mapper/*.xml
type-aliases-package: #com.xwbing.domain.entity
config-location: # classpath:mybatisConfig.xml
#log
logging:
config: classpath:log4j2.xml