Commit 9213a603 authored by 董建华's avatar 董建华

增加多数据源

parent eb2349b0
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
......@@ -22,7 +23,7 @@ import cn.quantgroup.tech.db.EnableDynamicDataSource;
@EnableCaching
@EnableAsync
@EnableAspectJAutoProxy
@SpringBootApplication
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDynamicDataSource
public class Bootstrap {
......
package cn.quantgroup.xyqb.aspect.captcha;
import cn.quantgroup.xyqb.entity.CountDevice;
import cn.quantgroup.xyqb.entity.LoginInfo;
import cn.quantgroup.xyqb.risk.entity.CountDevice;
import cn.quantgroup.xyqb.entity.enums.Device;
import cn.quantgroup.xyqb.entity.enums.KeyType;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.LoginRefuseResult;
import cn.quantgroup.xyqb.repository.LoginInfoRepository;
import cn.quantgroup.xyqb.repository.WhiteListRepository;
import cn.quantgroup.xyqb.risk.entity.LoginInfo;
import cn.quantgroup.xyqb.risk.repository.LoginInfoRepository;
import cn.quantgroup.xyqb.risk.repository.WhiteListRepository;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
......@@ -16,16 +16,12 @@ import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
/**
* @author :dongjianhua
......
......@@ -44,7 +44,7 @@ public class JpaConfig {
@Value("${xyqb.data.mysql.max-pool-size}")
private Integer maxPoolSize;
@Primary
@Bean
@DependsOn(value = "dataSource")
public EntityManagerFactory entityManagerFactory(DataSource dataSource) {
......
package cn.quantgroup.xyqb.config.data;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* 登录风控拦截数据库
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"cn.quantgroup.xyqb.risk.repository"},
entityManagerFactoryRef = "riskEntityManager",
transactionManagerRef = "riskTransactionManager")
public class LoginRiskJpaConfig {
@Value("${login.risk.datasource.url}")
private String dataSourceUrl;
@Value("${login.risk.datasource.password}")
private String password;
@Value("${login.risk.datasource.username}")
private String username;
@Value("${xyqb.data.mysql.max-pool-size}")
private Integer maxPoolSize;
private static final String DATABASE_TYPE_DEFAULT = "com.mysql.jdbc.Driver";
@Bean(name = "riskEntityManager")
@DependsOn("riskDataSource")
public EntityManagerFactory entityManagerFactory(
@Qualifier("riskDataSource") DataSource dataSource
) {
LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
entityManager.setDataSource(dataSource);
entityManager.setPackagesToScan("cn.quantgroup.xyqb.risk");
entityManager.setPersistenceUnitName("riskDataSource");
Properties properties = new Properties();
properties.put("hibernate.jdbc.batch_size", 30);
properties.put("hibernate.order_inserts", true);
properties.put("hibernate.order_updates", true);
entityManager.setJpaProperties(properties);
entityManager.setJpaVendorAdapter(jpaVendorAdapter());
entityManager.afterPropertiesSet();
return entityManager.getObject();
}
private JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(false);
hibernateJpaVendorAdapter.setGenerateDdl(false);
hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
return hibernateJpaVendorAdapter;
}
@Bean(name = "riskTransactionManager")
@DependsOn("riskEntityManager")
public PlatformTransactionManager transactionManager(
@Qualifier("riskEntityManager") EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
@Bean(name = "riskJdbcTemplate")
@DependsOn("riskDataSource")
public JdbcTemplate jdbcTemplate(@Qualifier("riskDataSource") DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
return jdbcTemplate;
}
/**
* private static final String DATASOURCE_TYPE_DEFAULT =
* "com.zaxxer.hikari.HikariDataSource";
* private static final String DATABASE_TYPE_DEFAULT =
* "com.mysql.jdbc.Driver";
* private static final String MASTER_PREFIX =
* "spring.datasource.";
* private static final String SLAVE_PREFIX =
* "slave.datasource.";
*
* @return
*/
@Bean(name = "riskDataSource")
public DataSource riskDataSource() {
DataSourceBuilder factory = DataSourceBuilder
.create()
.driverClassName(DATABASE_TYPE_DEFAULT)
.url(dataSourceUrl)
.username(username)
.password(password)
.type(HikariDataSource.class);
return factory.build();
}
}
package cn.quantgroup.xyqb.entity;
package cn.quantgroup.xyqb.risk.entity;
import cn.quantgroup.xyqb.entity.enums.Device;
......@@ -8,10 +8,7 @@ import lombok.ToString;
import javax.persistence.*;
/**
* 查询营销短信统计信息
*
* @author renwc
* @date 2020-07-14
* 统计黑名单
*/
@NamedNativeQueries(
{
......
package cn.quantgroup.xyqb.entity;
package cn.quantgroup.xyqb.risk.entity;
import cn.quantgroup.xyqb.entity.BaseEntity;
import cn.quantgroup.xyqb.entity.enums.Device;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.sql.Timestamp;
/**
* @author :dongjianhua
......
package cn.quantgroup.xyqb.entity;
package cn.quantgroup.xyqb.risk.entity;
import cn.quantgroup.xyqb.entity.BaseEntity;
import cn.quantgroup.xyqb.entity.enums.KeyType;
import lombok.Data;
......
package cn.quantgroup.xyqb.repository;
package cn.quantgroup.xyqb.risk.repository;
import cn.quantgroup.xyqb.entity.CountDevice;
import cn.quantgroup.xyqb.entity.LoginInfo;
import cn.quantgroup.xyqb.entity.enums.Device;
import cn.quantgroup.xyqb.risk.entity.CountDevice;
import cn.quantgroup.xyqb.risk.entity.LoginInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.scheduling.annotation.Async;
......@@ -25,20 +24,11 @@ public interface LoginInfoRepository extends JpaRepository<LoginInfo, Long> {
* @return
*/
// @Query(value = "select count(1) ,device from login_info where phone_no=?1 and last_login_at> DATE_ADD(CURRENT_TIMESTAMP(),INTERVAL -90 DAY group by device", nativeQuery = true)
CountDevice countByPhoneAndDevice(String phone, int device, String deviceId);
CountDevice countByPhoneAndDevice(String phone, int device,String deviceId);
/**
* 查询有没有(手机+设备唯一)
*
* @param phone
* @param device
* @return
*/
LoginInfo getFirstByPhoneNoAndDevice(String phone, Device device);
@Async
@Override
<S extends LoginInfo> S save(S s);
}
package cn.quantgroup.xyqb.repository;
package cn.quantgroup.xyqb.risk.repository;
import cn.quantgroup.xyqb.entity.WhiteList;
import cn.quantgroup.xyqb.risk.entity.WhiteList;
import cn.quantgroup.xyqb.entity.enums.KeyType;
import org.springframework.data.jpa.repository.JpaRepository;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment