整合多数据源(待完善)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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 ? "男" : "女");
|
||||
|
||||
@@ -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,为null,testOnBorrow、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
|
||||
26
boot-service/src/main/resources/mapper/sysUser.xml
Normal file
26
boot-service/src/main/resources/mapper/sysUser.xml
Normal 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>
|
||||
@@ -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容器
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(",");
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user