引入多数据源及内存数据库

This commit is contained in:
zhouxiunai
2018-11-28 20:32:19 +08:00
parent 799544ff9c
commit f8d392d5af
23 changed files with 424 additions and 72 deletions
@@ -0,0 +1,28 @@
package com.gzzn.omms.msgexchangeapi.config;
import javax.sql.DataSource;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
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;
@Configuration
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.primary")
public DataSource primaryDataSource()
{
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.secondary")
public DataSource secondaryDataSource()
{
return DataSourceBuilder.create().build();
}
}
@@ -0,0 +1,70 @@
package com.gzzn.omms.msgexchangeapi.config;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
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.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactoryPrimary",
transactionManagerRef="transactionManagerPrimary",
basePackages= { "com.gzzn.omms.msgexchangeapi.domain.primary.dao" }
) //设置Repository所在位置
public class PrimaryConfig
{
@Autowired
@Qualifier("primaryDataSource")
private DataSource primaryDataSource;
@Primary
@Bean(name = "entityManagerPrimary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder)
{
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Primary
@Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder)
{
return builder
.dataSource(primaryDataSource)
.properties(getVendorProperties(primaryDataSource))
.packages("com.gzzn.omms.msgexchangeapi.domain.primary.entity") //设置实体类所在位置
.persistenceUnit("primaryPersistenceUnit")
.build();
}
@Autowired private JpaProperties jpaProperties;
private Map<String, String> getVendorProperties(DataSource dataSource)
{
return jpaProperties.getHibernateProperties(dataSource);
}
@Primary
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder)
{
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}
@@ -0,0 +1,64 @@
package com.gzzn.omms.msgexchangeapi.config;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactorySecondary",
transactionManagerRef="transactionManagerSecondary",
basePackages= { "com.gzzn.omms.msgexchangeapi.domain.secondary.dao" }
) //设置Repository所在位置
public class SecondaryConfig
{
@Autowired
@Qualifier("secondaryDataSource")
private DataSource secondaryDataSource;
@Bean(name = "entityManagerSecondary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder)
{
return entityManagerFactorySecondary(builder).getObject().createEntityManager();
}
@Bean(name = "entityManagerFactorySecondary")
public LocalContainerEntityManagerFactoryBean
entityManagerFactorySecondary (EntityManagerFactoryBuilder builder)
{
return builder
.dataSource(secondaryDataSource)
.properties(getVendorProperties(secondaryDataSource))
.packages("com.gzzn.omms.msgexchangeapi.domain.secondary.entity") //设置实体类所在位置
.persistenceUnit("secondaryPersistenceUnit")
.build();
}
@Autowired
private JpaProperties jpaProperties;
private Map<String, String> getVendorProperties(DataSource dataSource)
{
return jpaProperties.getHibernateProperties(dataSource);
}
@Bean(name = "transactionManagerSecondary")
PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder)
{
return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
}
}
@@ -23,7 +23,7 @@ public class SwaggerConfig {
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo())
.host("130.120.3.231:91/msgexchangeapi")
.host("localhost:8080")
;
}
@@ -1,23 +1,34 @@
package com.gzzn.omms.msgexchangeapi.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.Cminmsg;
import com.gzzn.omms.msgexchangeapi.dto.ResponseDto;
import com.gzzn.omms.msgexchangeapi.service.ICminmsgService;
@RestController
@RequestMapping("/cminmsgs")
public class CminmsgsController {
@Autowired
private ICminmsgService cminmsgService;
/***
* 发送消息到Cminmsgs数据库表
* @param msg
* @param topic
* @return
*/
@GetMapping(value = "/send")
public ResponseDto send(String msg,String topic) {
return ResponseDto.success();
@PostMapping(value = "/send")
public ResponseDto send(@RequestBody String xmlmsg) {
Cminmsg minmsg = cminmsgService.sendXmlMsg(xmlmsg);
return ResponseDto.success(minmsg.getCminmsgsId());
}
}
@@ -1,4 +1,4 @@
package com.gzzn.omms.msgexchangeapi.dao;
package com.gzzn.omms.msgexchangeapi.domain.primary.dao;
import java.util.List;
@@ -6,7 +6,7 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import com.gzzn.omms.msgexchangeapi.entiy.Cminmsg;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.Cminmsg;
public interface CminmsgDao extends CrudRepository<Cminmsg, Long> {
@@ -1,8 +1,8 @@
package com.gzzn.omms.msgexchangeapi.dao;
package com.gzzn.omms.msgexchangeapi.domain.primary.dao;
import org.springframework.data.repository.CrudRepository;
import com.gzzn.omms.msgexchangeapi.entiy.Cmoutmsg;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.Cmoutmsg;
public interface CmoutmsgDao extends CrudRepository<Cmoutmsg, Long> {
@@ -1,4 +1,4 @@
package com.gzzn.omms.msgexchangeapi.entiy;
package com.gzzn.omms.msgexchangeapi.domain.primary.entity;
import java.io.Serializable;
import javax.persistence.*;
@@ -11,10 +11,12 @@ import java.util.Date;
*/
@Entity
@Table(name="CMINMSGS")
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "SEQ_CMINMSGS")
public class Cminmsg implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequenceGenerator")
@Column(name="CMINMSGS_ID")
private long cminmsgsId;
@@ -22,18 +24,18 @@ public class Cminmsg implements Serializable {
@Column(name="CMINMSGS_CLOB_MSG")
private String cminmsgsClobMsg;
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CMINMSGS_DATE_PROCESSED")
private Date cminmsgsDateProcessed;
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CMINMSGS_DATE_RECEIVED")
private Date cminmsgsDateReceived;
@Column(name="CMINMSGS_STATUS")
private String cminmsgsStatus;
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CMINMSGS_SUBSYSTEM_DATE_SENT")
private Date cminmsgsSubsystemDateSent;
@@ -1,4 +1,4 @@
package com.gzzn.omms.msgexchangeapi.entiy;
package com.gzzn.omms.msgexchangeapi.domain.primary.entity;
import java.io.Serializable;
import javax.persistence.*;
@@ -23,18 +23,18 @@ public class Cmoutmsg implements Serializable {
@Column(name="CMINMSGS_CLOB_MSG")
private String cminmsgsClobMsg;
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CMINMSGS_DATE_PROCESSED")
private Date cminmsgsDateProcessed;
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CMINMSGS_DATE_RECEIVED")
private Date cminmsgsDateReceived;
@Column(name="CMINMSGS_STATUS")
private String cminmsgsStatus;
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CMINMSGS_SUBSYSTEM_DATE_SENT")
private Date cminmsgsSubsystemDateSent;
@@ -1,4 +1,4 @@
package com.gzzn.omms.msgexchangeapi.entiy.msg;
package com.gzzn.omms.msgexchangeapi.domain.primary.entity.msg;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -1,4 +1,4 @@
package com.gzzn.omms.msgexchangeapi.entiy.msg;
package com.gzzn.omms.msgexchangeapi.domain.primary.entity.msg;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -1,12 +1,12 @@
package com.gzzn.omms.msgexchangeapi.entiy.msg.rqfd;
package com.gzzn.omms.msgexchangeapi.domain.primary.entiy.msg.rqfd;
import java.util.Date;
import java.util.Locale;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.gzzn.omms.msgexchangeapi.entiy.msg.Meta;
import com.gzzn.omms.msgexchangeapi.entiy.msg.Msg;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.msg.Meta;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.msg.Msg;
import com.gzzn.omms.msgexchangeapi.utils.DateTimeUtil;
@JacksonXmlRootElement(localName="MSG")
@@ -1,4 +1,4 @@
package com.gzzn.omms.msgexchangeapi.entiy.msg.rqfd;
package com.gzzn.omms.msgexchangeapi.domain.primary.entiy.msg.rqfd;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -0,0 +1,9 @@
package com.gzzn.omms.msgexchangeapi.domain.secondary.dao;
import org.springframework.data.repository.CrudRepository;
import com.gzzn.omms.msgexchangeapi.domain.secondary.entity.Status;
public interface StatusDao extends CrudRepository<Status, Long> {
}
@@ -0,0 +1,27 @@
package com.gzzn.omms.msgexchangeapi.domain.secondary.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="status")
public class Status {
@Id
private Long id;
private String remark;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
@@ -8,10 +8,10 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import com.gzzn.omms.msgexchangeapi.dao.CmoutmsgDao;
import com.gzzn.omms.msgexchangeapi.entiy.Cmoutmsg;
import com.gzzn.omms.msgexchangeapi.entiy.msg.rqfd.RefdMsg;
import com.gzzn.omms.msgexchangeapi.entiy.msg.rqfd.RefdMsgBody;
import com.gzzn.omms.msgexchangeapi.domain.primary.dao.CmoutmsgDao;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.Cmoutmsg;
import com.gzzn.omms.msgexchangeapi.domain.primary.entiy.msg.rqfd.RefdMsg;
import com.gzzn.omms.msgexchangeapi.domain.primary.entiy.msg.rqfd.RefdMsgBody;
import com.gzzn.omms.msgexchangeapi.service.IExchangeService;
import com.gzzn.omms.msgexchangeapi.utils.DateTimeUtil;
@@ -0,0 +1,26 @@
package com.gzzn.omms.msgexchangeapi.service;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gzzn.omms.msgexchangeapi.domain.primary.dao.CminmsgDao;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.Cminmsg;
@Service
public class CminmsgServiceImpl implements ICminmsgService {
@Autowired
private CminmsgDao cminmsgDao;
@Override
public Cminmsg sendXmlMsg(String xmlMsg) {
Cminmsg cminmsg = new Cminmsg();
cminmsg.setCminmsgsClobMsg(xmlMsg);
cminmsg.setCminmsgsDateReceived(new Date());
Cminmsg rt = cminmsgDao.save(cminmsg);
return rt;
}
}
@@ -0,0 +1,12 @@
package com.gzzn.omms.msgexchangeapi.service;
import com.gzzn.omms.msgexchangeapi.domain.primary.entity.Cminmsg;
public interface ICminmsgService {
/**
* 发送xml格式的消息到cminmsgs表
* @param xmlMsg
*/
public Cminmsg sendXmlMsg(String xmlMsg);
}
@@ -1,18 +1,12 @@
package com.gzzn.omms.msgexchangeapi.task;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import com.gzzn.omms.msgexchangeapi.dao.CminmsgDao;
import com.gzzn.omms.msgexchangeapi.entiy.Cminmsg;
import com.gzzn.omms.msgexchangeapi.exception.ExchangeServiceException;
import com.gzzn.omms.msgexchangeapi.service.ICminmsgService;
import com.gzzn.omms.msgexchangeapi.service.IExchangeService;
import com.gzzn.omms.msgexchangeapi.service.IKafkaService;
@@ -32,39 +26,14 @@ public class ExchangeTask {
IExchangeService exchangeService;
@Autowired
private CminmsgDao cminmsgDao;
private ICminmsgService cminmsgService;
@Scheduled(cron="0 0/1 * * * ?")
public void corn()
{
logger.info("定时任务启动....");
Long maxPerLong = 1000L; //每次最大发送多少条消息
Long lenTotal = cminmsgDao.getCminmsgsDateProcessedIsNotNullCount();
Long lenSend = 0L;
Integer pageIndex = 0;
Integer pageSize = 50;
while(lenSend < lenTotal && lenSend < maxPerLong)
{
List<Cminmsg> ls = cminmsgDao.findByCminmsgsDateProcessedIsNotNull(new PageRequest(pageIndex,pageSize));
for(Cminmsg node:ls)
{
String strJson = null;
try {
strJson = exchangeService.xmlToJson(node.getCminmsgsClobMsg());
if(!StringUtils.isEmpty(strJson))
{
kafkaservice.msgSend("topic2", strJson);
}
} catch (ExchangeServiceException e) {
logger.error(e.getMessage());
}
} // end for
lenSend += ls.size();
pageIndex++;
}//end while
//
logger.info("同步完成");
}
+22 -10
View File
@@ -1,3 +1,24 @@
spring:
datasource:
primary:
username: ommsxc
password: ommsxc
url: jdbc:oracle:thin:@130.120.3.236:1521/xe
driver: oracle.jdbc.driver.OracleDriver
tomcat:
max-active: 30
test-on-borrow: true
initial-size: 3
secondary:
username: ommsxc
password: ommsxc
url: jdbc:oracle:thin:@130.120.3.236:1521/xe
driver: oracle.jdbc.driver.OracleDriver
tomcat:
max-active: 30
test-on-borrow: true
initial-size: 3
kafka:
producer:
retries: 0
@@ -28,13 +49,4 @@ kafka:
concurrency: 10
group:
id: test
spring:
datasource:
username: ommsxc
password: ommsxc
url: jdbc:oracle:thin:@130.120.3.236:1521/xe
driver: oracle.jdbc.driver.OracleDriver
tomcat:
max-active: 30
test-on-borrow: true
initial-size: 3