启动类:
package com.eshore.main; import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.apache.cxf.transport.servlet.CXFServlet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.ServletRegistrationBean; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ImportResource; @ImportResource(value = { "classpath:applicationContext.xml" }) @SpringBootApplication public class SpringBootStarter implements EmbeddedServletContainerCustomizer{ private static final Logger logger = LoggerFactory.getLogger(SpringBootStarter.class); private static final int CXF_PORT = 9090; public static void main(String[] args) { SpringApplication.run(SpringBootStarter.class, args); } @Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new CXFServlet(), "/services/*"); } /* * 设置启动端口号 */ public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(CXF_PORT); TomcatEmbeddedServletContainerFactory tomcatFactory = (TomcatEmbeddedServletContainerFactory)container; tomcatFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer()); } class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer { public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); //设置最大连接数 protocol.setMaxConnections(2800); //设置最大线程数 protocol.setMaxThreads(2800); protocol.setConnectionTimeout(40000); } } }
接口类:
package com.eshore.db.webservice; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import com.eshore.db.SendDto; @WebService public interface ServerSendSmsService { @WebMethod String sendSms(SendDto sms); @WebMethod String getState(@WebParam(name = "requestId") String requestId); }
实现类:
package com.eshore.db.webservice; import javax.jws.WebService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import com.eshore.db.SendDto; import com.eshore.db.SmsService; import com.eshore.message.SmsMessage; import com.eshore.sender.ServiceSender; import com.eshore.util.MD5Crypter; @WebService(endpointInterface="com.eshore.db.webservice.ServerSendSmsService",serviceName="ServerSendSmsService") public class ServerSendSmsServiceImpl implements ServerSendSmsService{ private Logger log=LoggerFactory.getLogger(this.getClass()); @Autowired private ServiceSender sender; @Autowired private SmsService smsService; @Override public String sendSms(SendDto dto) { log.info("receive message :{}",dto.toString()); String requestId=""; SmsMessage msg=new SmsMessage(); msg.setContent(dto.getContent()); msg.setReceivers(dto.getReceivers()); msg.setSender(dto.getSender()); msg.setContent(dto.getContent()); String originalString=String.valueOf(System.currentTimeMillis())+dto.getContent(); requestId=MD5Crypter.MD5Encode(originalString); msg.setMessageId(requestId); //sender.send(msg); log.info("requestId:{}",requestId); log.info("controller save message..."); requestId="it's a test"; return requestId; } @Override public String getState(String requestId) { return "getstateTest"; //return smsService.queryByRequestId(requestId); } }
配置文件:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName" default-lazy-init="true"> <description>基于Apache CXF的Web Service配置文件</description> <import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> <!-- 发送短信 --> <jaxws:endpoint id="ServerSendSmsService" address="/ServerSendSmsService"> <jaxws:implementor> <ref bean="serverSendSmsServiceImpl" /> </jaxws:implementor> </jaxws:endpoint> <bean id="serverSendSmsServiceImpl" class="com.eshore.db.webservice.ServerSendSmsServiceImpl" /> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <import resource="classpath*:applicationContext-cxf.xml"/> <context:component-scan base-package="com.eshore.*" /> <task:annotation-driven /> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:config.properties</value> </list> </property> </bean> <!-- 配置数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url}" /> <property name="username" value="${jdbc_username}" /> <property name="password" value="${jdbc_password}" /> <property name="initialSize" value="10" /> <property name="maxActive" value="60" /> <property name="minIdle" value="20" /> <property name="maxWait" value="60000" /> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> <property name="validationQuery" value="${validationQuery}" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <property name="minEvictableIdleTimeMillis" value="25200000" /> <property name="removeAbandoned" value="false" /> <property name="removeAbandonedTimeout" value="1800" /> <property name="logAbandoned" value="true" /> <!-- <property name="filters" value="stat" /> --> </bean> <!-- JDBC模版 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <bean class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="com.eshore" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> </bean> </property> </bean> <!-- 配置 JPA Transaction --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"></bean> </property> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!-- 配置 Annotation 驱动,定义事务--> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> </beans>