Commit f056c900 authored by chenkai's avatar chenkai

V1.0.0 fund-manage-sdk

parents
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.quantgroup</groupId>
<artifactId>fundmanage</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>fund-manage-sdk</name>
<description>fund-manage-sdk project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.7.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<maven.test.skip>true</maven.test.skip>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mobile</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.10.Final</version>
<exclusions>
<exclusion>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</exclusion>
<exclusion>
<artifactId>xml-apis</artifactId>
<groupId>xml-apis</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.3.10.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.3</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.6</version>
</dependency>
<!-- hibernate end -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>262</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>
<dependency>
<groupId>com.github.kstyrc</groupId>
<artifactId>embedded-redis</artifactId>
<version>0.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.3.1</version>
</dependency>
<!-- rabbitmq -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.6.2</version>
</dependency>
<dependency>
<groupId>com.octo.captcha</groupId>
<artifactId>jcaptcha</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>com.jhlabs</groupId>
<artifactId>imaging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- rabbitmq -->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>product</id>
<properties>
<profiles.activation>product</profiles.activation>
</properties>
<build>
<resources>
<resource>
<directory>
${project.basedir}/src/main/resources/config/release
</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>dev</id>
<properties>
<profiles.activation>dev</profiles.activation>
</properties>
<build>
<resources>
<resource>
<directory>
${project.basedir}/src/main/resources/config/dev
</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.activation>test</profiles.activation>
</properties>
<build>
<resources>
<resource>
<directory>
${project.basedir}/src/main/resources/config/test
</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>beta</id>
<properties>
<profiles.activation>beta</profiles.activation>
</properties>
<build>
<resources>
<resource>
<directory>
${project.basedir}/src/main/resources/config/beta
</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
</project>
package cn.quantgroup;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.orm.jpa.EntityScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* Created by Rocky on 2016/8/31.
*/
@ComponentScan(basePackages = "cn.quantgroup")
@EntityScan(basePackages = {"cn.quantgroup.fundmanage.entity"})
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"cn.quantgroup.fundmanage.repository"})
@SpringBootApplication
@PropertySource({"classpath:application.properties", "classpath:fundmanage.properties"})
@EnableAspectJAutoProxy
@EnableAsync
@Configuration
public class Bootstrap {
/* public static void parseOptions(String[] args) throws ParseException {
Options opt = new Options();
Option worker = new Option("w", "worker", true, "total workers");
worker.setRequired(true);
Option currentWorker = new Option("cw", "currentWorker", true, "current worker");
currentWorker.setRequired(true);
opt.addOption("h", "help", false, "--worker=totalWorkers --currentWorker=currentWorker")
.addOption(worker)
.addOption(currentWorker);
CommandLineParser parser = new DefaultParser();
CommandLine commandLine = parser.parse(opt, args, true);
if (!commandLine.hasOption("w") || !commandLine.hasOption("cw")) {
System.out.println("must with --worker and --currentWorker args specified");
System.exit(-1);
}
String value = commandLine.getOptionValue("worker");
if (StringUtils.isNumeric(value) && StringUtils.isNotEmpty(value)) {
Constants.Concurrent.WORKERS = Long.valueOf(value);
} else {
System.out.println("--worker must be a number");
System.exit(-1);
}
value = commandLine.getOptionValue("currentWorker");
if (StringUtils.isNumeric(value) && StringUtils.isNotEmpty(value)) {
Constants.Concurrent.CURRENT_WORKER = Long.valueOf(value);
} else {
System.out.println("--currentWoker must be a number");
System.exit(-1);
}
}*/
public static void main(String[] args) {
// parseOptions(args);
SpringApplication.run(Bootstrap.class, args);
}
}
package cn.quantgroup.config.http;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.ConnectionKeepAliveStrategy;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.cookie.Cookie;
import org.apache.http.cookie.CookieOrigin;
import org.apache.http.cookie.CookieSpecProvider;
import org.apache.http.cookie.MalformedCookieException;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.impl.cookie.BestMatchSpecFactory;
import org.apache.http.impl.cookie.BrowserCompatSpec;
import org.apache.http.impl.cookie.BrowserCompatSpecFactory;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.embedded.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.ConverterRegistry;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.session.web.http.HeaderHttpSessionStrategy;
import org.springframework.web.filter.CharacterEncodingFilter;
import javax.net.ssl.SSLContext;
import javax.servlet.MultipartConfigElement;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
/**
* Created by Miraculous on 15/7/12.
*/
@Configuration
public class HttpConfig {
@Bean
HeaderHttpSessionStrategy sessionStrategy() {
return new HeaderHttpSessionStrategy();
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
registrationBean.setFilter(characterEncodingFilter);
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
registrationBean.setOrder(Integer.MIN_VALUE);
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
/**
* 该方法主要对对象json序列化产生影响,其功能如下:
* 1. 禁用缩进输出
* 2. 日期格式排版
* 3. null被过滤掉
* 4. 将enum转为其ordinal
*
* @return Jackson2ObjectMapperBuilder
*/
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.indentOutput(false)
.dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))
.defaultViewInclusion(false)
.serializationInclusion(JsonInclude.Include.NON_NULL)
.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_INDEX,
DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS);
return builder;
}
// hack spring mvc.
@Bean
public IntegerToEnumConverterFactory getIntegerToEnumConverterFactory(
ConverterRegistry defaultConversionService, ConverterRegistry mvcConversionService, ConverterRegistry integrationConversionService) {
IntegerToEnumConverterFactory factory = new IntegerToEnumConverterFactory();
defaultConversionService.removeConvertible(String.class, Enum.class);
mvcConversionService.removeConvertible(String.class, Enum.class);
integrationConversionService.removeConvertible(String.class, Enum.class);
defaultConversionService.addConverterFactory(factory);
mvcConversionService.addConverterFactory(factory);
integrationConversionService.addConverterFactory(factory);
return factory;
}
@Bean(name = "httpClient")
public CloseableHttpClient httpClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
// socket factory
ConnectionSocketFactory plainSocketFactory = new PlainConnectionSocketFactory();
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(
null, (x509Certificates, authType) -> true).build();
LayeredConnectionSocketFactory sslSocketFactory =
new SSLConnectionSocketFactory(sslContext, new AllowAllHostnameVerifier());
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", plainSocketFactory)
.register("https", sslSocketFactory).build();
// cookie specification
Registry<CookieSpecProvider> cookieSpecProviderRegistry = RegistryBuilder.<CookieSpecProvider>create()
.register(CookieSpecs.BEST_MATCH, new BestMatchSpecFactory())
.register(CookieSpecs.BROWSER_COMPATIBILITY, new BrowserCompatSpecFactory())
.register("easy", httpContext -> new BrowserCompatSpec() {
public void validate(Cookie cookie, CookieOrigin origin) throws MalformedCookieException {
}
}).build();
// connection manager
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
connectionManager.setMaxTotal(10000);
connectionManager.setDefaultMaxPerRoute(1000);
// retry handler
HttpRequestRetryHandler retryHandler = new StandardHttpRequestRetryHandler(3, false);
// keep alive strategy
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy();
// httpclient
return HttpClients.custom()
.setConnectionManager(connectionManager)
.setRetryHandler(retryHandler)
.setKeepAliveStrategy(keepAliveStrategy)
.setDefaultCookieSpecRegistry(cookieSpecProviderRegistry).build();
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("5MB");
factory.setMaxRequestSize("5MB");
return factory.createMultipartConfig();
}
}
package cn.quantgroup.config.http;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
/**
* Created by Miraculous on 15/7/12.
*/
final class IntegerToEnumConverterFactory implements ConverterFactory<String, Enum> {
IntegerToEnumConverterFactory() {
}
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
Class<?> enumType = targetType;
while (enumType != null && !enumType.isEnum()) {
enumType = enumType.getSuperclass();
}
if (enumType == null) {
throw new IllegalArgumentException("The target type " + targetType.getName() + " does not refer to an enum");
} else {
return new IntegerToEnumConverterFactory.IntegerToEnum(enumType);
}
}
private class IntegerToEnum<T extends Enum> implements Converter<String, T> {
private final Class<T> enumType;
public IntegerToEnum(Class<T> enumType) {
this.enumType = enumType;
}
public T convert(String source) {
T[] ts = enumType.getEnumConstants();
int ordinal = Integer.parseInt(source);
return ordinal < ts.length && ordinal >= 0 ? ts[ordinal] : null;
}
}
}
\ No newline at end of file
package cn.quantgroup.fundmanage.config.message;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by Rocky on 2016/9/5.
*/
@Configuration
public class RabbitMq4FinancialConfig {
@Value("${rabbitmq.financial.exchange}")
private String financialExchange;
@Value("${rabbitmq.connection.host}")
private String host;
@Value("${rabbitmq.connection.port}")
private Integer port;
@Value("${rabbitmq.connection.user}")
private String user;
@Value("${rabbitmq.connection.password}")
private String password;
@Value("${rabbitmq.connection.virtual-host.financial}")
private String virtualHost;
@Value("${rabbitmq.connection.queue.baitiaoOrder}")
private String baitiaoOrderQueue;
private static volatile CachingConnectionFactory cachingConnectionFactory2;
// @Bean(name = "financialConnection")
private CachingConnectionFactory cachingConnectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
connectionFactory.setChannelCacheSize(1024);
connectionFactory.setCacheMode(CachingConnectionFactory.CacheMode.CONNECTION);
connectionFactory.setChannelCacheSize(180 * 1000);
connectionFactory.setConnectionCacheSize(1024);
connectionFactory.setUsername(user);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
connectionFactory.setPublisherReturns(false);
connectionFactory.setPublisherConfirms(false);
return connectionFactory;
}
@Bean(name = "financialRabbitAdmin")
public RabbitAdmin rabbitAdmin() {
// public RabbitAdmin rabbitAdmin(@Qualifier("financialConnection")CachingConnectionFactory cachingConnectionFactory) {
if (cachingConnectionFactory2 == null) {
cachingConnectionFactory2 = cachingConnectionFactory();
}
return new RabbitAdmin(cachingConnectionFactory2);
}
@Bean(name = "financialExchange")
public DirectExchange directExchange() {
return new DirectExchange(financialExchange, true, false);
}
@Bean(name = "baitiaoOrder")
public Queue baitiaoOrderQueue(){
return new Queue(baitiaoOrderQueue);
}
@Bean(name = "baitiaoOrderBinding")
public Binding baitiaoOrderBinding(@Qualifier("financialRabbitAdmin")RabbitAdmin rabbitAdmin, @Qualifier("baitiaoOrder")Queue baitiaoOrder, @Qualifier("financialExchange")DirectExchange directExchange) {
Binding binding = BindingBuilder.bind(baitiaoOrder).to(directExchange).with(baitiaoOrder.getName());
rabbitAdmin.declareBinding(binding);
return binding;
}
@Bean(name = "financialRabbitTemplate")
public RabbitTemplate financialRabbitTemplate() {
// public RabbitTemplate contractTemplate(@Qualifier("financialConnection")ConnectionFactory connectionFactory) {
if (cachingConnectionFactory2 == null) {
cachingConnectionFactory2 = cachingConnectionFactory();
}
RabbitTemplate template = new RabbitTemplate(cachingConnectionFactory2);
template.setExchange(financialExchange);
return template;
}
}
package cn.quantgroup.fundmanage.config.message;
import cn.quantgroup.fundmanage.service.message.IMessageHandler;
import cn.quantgroup.fundmanage.service.message.impl.GenContractSuccessHandler;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by Rocky on 2016/9/5.
*/
@Configuration
public class RabbitMqConfig {
@Value("${fundmanage.rabbitmq.queue.waiting}")
private String queueName;
@Value("${fundmanage.rabbitmq.queue.success}")
private String sucQueueName;
@Value("${fundmanage.rabbitmq.exchange}")
private String fundmanageExchange;
@Value("${rabbitmq.connection.host}")
private String host;
@Value("${rabbitmq.connection.port}")
private Integer port;
@Value("${rabbitmq.connection.user}")
private String user;
@Value("${rabbitmq.connection.password}")
private String password;
@Value("${rabbitmq.connection.virtual-host}")
private String virtualHost;
@Bean(name = "blackHoleConnection")
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
connectionFactory.setChannelCacheSize(1024);
connectionFactory.setCacheMode(CachingConnectionFactory.CacheMode.CONNECTION);
connectionFactory.setChannelCacheSize(180 * 1000);
connectionFactory.setConnectionCacheSize(1024);
connectionFactory.setUsername(user);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
connectionFactory.setPublisherReturns(false);
connectionFactory.setPublisherConfirms(false);
return connectionFactory;
}
@Bean(name = "blackHoleAmqpAdmin")
public AmqpAdmin amqpAdmin(@Qualifier("blackHoleConnection")ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
@Bean(name = "fundmanageExchange")
public DirectExchange directExchange() {
return new DirectExchange(fundmanageExchange);
}
@Bean(name = "contractQueue")
public Queue contractQueue() {
return new Queue(queueName);
}
@Bean(name = "contractBinding")
public Binding bindingRepay(@Qualifier("blackHoleAmqpAdmin")AmqpAdmin amqpAdmin, @Qualifier("contractQueue")Queue contractQueue, @Qualifier("fundmanageExchange")DirectExchange directExchange) {
Binding binding = BindingBuilder.bind(contractQueue).to(directExchange).with(contractQueue.getName());
amqpAdmin.declareBinding(binding);
return binding;
}
@Bean(name = "contractSucQueue")
public Queue contractSucQueue() {
return new Queue(sucQueueName);
}
@Bean(name = "contractSucBinding")
public Binding bindingSuc(@Qualifier("blackHoleAmqpAdmin")AmqpAdmin amqpAdmin, @Qualifier("contractSucQueue")Queue contractQueue, @Qualifier("fundmanageExchange")DirectExchange directExchange) {
Binding binding = BindingBuilder.bind(contractQueue).to(directExchange).with(contractQueue.getName());
amqpAdmin.declareBinding(binding);
return binding;
}
@Bean(name = "rabbitTemplate")
public RabbitTemplate contractTemplate(@Qualifier("blackHoleConnection")ConnectionFactory connectionFactory) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setExchange(fundmanageExchange);
return template;
}
@Bean(name = "blackHoleListenerContainer")
public SimpleMessageListenerContainer container(@Qualifier("blackHoleConnection")ConnectionFactory connectionFactory,
@Qualifier("contractSucQueue")Queue contractQueue,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueues(contractQueue);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setMessageListener(listenerAdapter);
container.start();
return container;
}
@Bean(name = "simpleHandler")
IMessageHandler receiver() {
return new GenContractSuccessHandler();
}
@Bean
MessageListenerAdapter listenerAdapter(@Qualifier("simpleHandler")IMessageHandler messageHandler) {
return new MessageListenerAdapter(messageHandler, "handle");
}
}
package cn.quantgroup.fundmanage.service.message;
/**
* Created by Rocky on 2016/9/5.
*/
public interface IMessageHandler {
void handle(String msg);
}
package cn.quantgroup.fundmanage.service.message.impl;
import cn.quantgroup.fundmanage.service.message.IMessageHandler;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by Rocky on 2016/9/5.
*/
public class GenContractSuccessHandler implements IMessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(GenContractSuccessHandler.class);
private static final ObjectMapper MAPPER = new ObjectMapper();
static {
MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
public void handle(String message){
}
}
spring.datasource.url=jdbc:mysql://192.168.192.206:3306/fund_manage?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.xa.data-source-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
spring.datasource.xa.properties.pinGlobalTxToPhysicalConnection=true
spring.datasource.xa.properties.autoReconnect=true
spring.data.jpa.repositories.enabled=true
spring.jpa.show-sql=true
spring.datasource.maximum-pool-size=100
server.port=8000
server.session-timeout=5184000
security.sessions=never
spring.aop.proxy-target-class=true
multipart.max-file-size=30Mb
multipart.max-request-size=30Mb
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=3600000
spring.datasource.validation-query=SELECT 1
# rabbitmq
fundmanage.rabbitmq.queue.waiting=waiting_generate
fundmanage.rabbitmq.queue.success=generate_success
fundmanage.rabbitmq.exchange=contract
rabbitmq.connection.host=192.168.192.243
rabbitmq.connection.port=5672
rabbitmq.connection.user=rabbit_admin
rabbitmq.connection.password=abc1234
rabbitmq.connection.virtual-host=/black_hole
rabbitmq.connection.virtual-host.financial=financial_system
rabbitmq.connection.queue.baitiaoOrder=baitiaoOrder
rabbitmq.financial.exchange=fs
fundmanage.stopkey=test
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/quant_group/logs/fund_manage.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/home/quant_group/logs/fund_manage.log.%d{yyyy-MM-dd}.bak</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{ISO8601} [%thread] [%-5level] %logger - %msg%n</Pattern>
</layout>
</appender>
<!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
<!--<logger name="root">
<level value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>-->
<logger name="com.atomikos" level="warn"/>
<logger name="org.springframework" level="warn"/>
<logger name="org.hibernate" level="warn"/>
<logger name="org.apache" level="warn"/>
<logger name="ch.qos.logback" level="warn"/>
<root level="info">
<appender-ref ref="FILE"/>
</root>
</configuration>
\ No newline at end of file
spring.datasource.url=jdbc:mysql://192.168.192.206:3306/fund_manage?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.xa.data-source-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
spring.datasource.xa.properties.pinGlobalTxToPhysicalConnection=true
spring.datasource.xa.properties.autoReconnect=true
spring.data.jpa.repositories.enabled=true
spring.jpa.show-sql=true
spring.datasource.maximum-pool-size=100
server.port=8000
server.session-timeout=5184000
security.sessions=never
spring.aop.proxy-target-class=true
multipart.max-file-size=30Mb
multipart.max-request-size=30Mb
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=3600000
spring.datasource.validation-query=SELECT 1
# rabbitmq
fundmanage.rabbitmq.queue.waiting=waiting_generate
fundmanage.rabbitmq.queue.success=generate_success
fundmanage.rabbitmq.exchange=contract
rabbitmq.connection.host=192.168.192.243
rabbitmq.connection.port=5672
rabbitmq.connection.user=rabbit_admin
rabbitmq.connection.password=abc1234
rabbitmq.connection.virtual-host=/black_hole
rabbitmq.connection.virtual-host.financial=financial_system
rabbitmq.connection.queue.baitiaoOrder=baitiaoOrder
rabbitmq.financial.exchange=fs
fundmanage.stopkey=test
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/quant_group/logs/fund_manage.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/home/quant_group/logs/fund_manage.log.%d{yyyy-MM-dd}.bak</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{ISO8601} [%thread] [%-5level] %logger - %msg%n</Pattern>
</layout>
</appender>
<!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
<!--<logger name="root">
<level value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>-->
<logger name="com.atomikos" level="warn"/>
<logger name="org.springframework" level="warn"/>
<logger name="org.hibernate" level="warn"/>
<logger name="org.apache" level="warn"/>
<logger name="ch.qos.logback" level="warn"/>
<root level="info">
<appender-ref ref="FILE"/>
</root>
</configuration>
\ No newline at end of file
spring.datasource.url=jdbc:mysql://192.168.192.206:3306/fund_manage?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.xa.data-source-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
spring.datasource.xa.properties.pinGlobalTxToPhysicalConnection=true
spring.datasource.xa.properties.autoReconnect=true
spring.data.jpa.repositories.enabled=true
spring.jpa.show-sql=true
spring.datasource.maximum-pool-size=100
server.port=8000
server.session-timeout=5184000
security.sessions=never
spring.aop.proxy-target-class=true
multipart.max-file-size=30Mb
multipart.max-request-size=30Mb
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=3600000
spring.datasource.validation-query=SELECT 1
# rabbitmq
fundmanage.rabbitmq.queue.waiting=waiting_generate
fundmanage.rabbitmq.queue.success=generate_success
fundmanage.rabbitmq.exchange=contract
rabbitmq.connection.host=192.168.192.243
rabbitmq.connection.port=5672
rabbitmq.connection.user=rabbit_admin
rabbitmq.connection.password=abc1234
rabbitmq.connection.virtual-host=/black_hole
rabbitmq.connection.virtual-host.financial=financial_system
rabbitmq.connection.queue.baitiaoOrder=baitiaoOrder
rabbitmq.financial.exchange=fs
fundmanage.stopkey=test
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/quant_group/logs/fund_manage.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/home/quant_group/logs/fund_manage.log.%d{yyyy-MM-dd}.bak</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{ISO8601} [%thread] [%-5level] %logger - %msg%n</Pattern>
</layout>
</appender>
<!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
<!--<logger name="root">
<level value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>-->
<logger name="com.atomikos" level="warn"/>
<logger name="org.springframework" level="warn"/>
<logger name="org.hibernate" level="warn"/>
<logger name="org.apache" level="warn"/>
<logger name="ch.qos.logback" level="warn"/>
<root level="info">
<appender-ref ref="FILE"/>
</root>
</configuration>
\ No newline at end of file
spring.datasource.url=jdbc:mysql://192.168.192.206:3306/fund_manage?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.xa.data-source-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
spring.datasource.xa.properties.pinGlobalTxToPhysicalConnection=true
spring.datasource.xa.properties.autoReconnect=true
spring.data.jpa.repositories.enabled=true
spring.jpa.show-sql=true
spring.datasource.maximum-pool-size=100
server.port=8000
server.session-timeout=5184000
security.sessions=never
spring.aop.proxy-target-class=true
multipart.max-file-size=30Mb
multipart.max-request-size=30Mb
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=3600000
spring.datasource.validation-query=SELECT 1
# rabbitmq
fundmanage.rabbitmq.queue.waiting=waiting_generate
fundmanage.rabbitmq.queue.success=generate_success
fundmanage.rabbitmq.exchange=contract
rabbitmq.connection.host=192.168.192.243
rabbitmq.connection.port=5672
rabbitmq.connection.user=rabbit_admin
rabbitmq.connection.password=abc1234
rabbitmq.connection.virtual-host=/black_hole
rabbitmq.connection.virtual-host.financial=financial_system
rabbitmq.connection.queue.baitiaoOrder=baitiaoOrder
rabbitmq.financial.exchange=fs
fundmanage.stopkey=test
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{ISO8601} [%thread] [%-5level] %logger - %msg%n</pattern>
</layout>
</appender>
<!-- <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/quant_group/logs/di_ting.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/home/quant_group/logs/di_ting.log.%d{yyyy-MM-dd}.bak</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{ISO8601} [%thread] [%-5level] %logger - %msg%n</Pattern>
</layout>
</appender>-->
<logger name="com.atomikos" level="warn"/>
<logger name="org.springframework" level="warn"/>
<logger name="org.hibernate" level="warn"/>
<logger name="org.apache" level="warn"/>
<logger name="ch.qos.logback" level="warn"/>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<!-- <appender-ref ref="FILE"/>-->
</root>
</configuration>
\ No newline at end of file
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