Spring Boot

This commit is contained in:
xwolf
2017-02-26 08:58:01 +08:00
commit 9ece86751b
18 changed files with 909 additions and 0 deletions
@@ -0,0 +1,13 @@
package com.xwolf;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.xwolf.boot.dao")
public class BootApplication {
public static void main(String[] args) {
SpringApplication.run(BootApplication.class, args);
}
}
@@ -0,0 +1,71 @@
package com.xwolf.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.google.common.collect.Lists;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* </p>
*
* @author xwolf
* @date 2017-02-25 08:14
* @since V1.0.0
*/
@Configuration
public class DataSourceConfig {
@ConfigurationProperties(prefix = "datasource.druid")
@Bean(name="datasource",initMethod = "init",destroyMethod = "close")
public DruidDataSource getDataSource(){
return new DruidDataSource();
}
@Bean
public PlatformTransactionManager transactionManager(){
return new DataSourceTransactionManager(getDataSource());
}
// 指定环境下dev 开启监控
@Bean
@Profile("dev")
public FilterRegistrationBean druidFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new WebStatFilter());
Map<String, String> intParams = new HashMap<>();
intParams.put("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
registration.setName("DruidWebStatFilter");
registration.setUrlPatterns(Lists.newArrayList("/*"));
registration.setInitParameters(intParams);
return registration;
}
//数据源监控
@Bean
@Profile("dev")
public ServletRegistrationBean servletRegistrationBean() {
ServletRegistrationBean registration = new ServletRegistrationBean();
registration.setServlet(new StatViewServlet());
registration.setName("druid");
registration.setUrlMappings(Lists.newArrayList("/druid/*"));
//自定义添加初始化参数
Map<String, String> intParams = new HashMap<>();
intParams.put("loginUsername","druid");
intParams.put("loginPassword","druid");
registration.setName("DruidWebStatFilter");
registration.setInitParameters(intParams);
return registration;
}
}
@@ -0,0 +1,47 @@
package com.xwolf.boot.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xwolf.boot.entity.User;
import com.xwolf.boot.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
* <p>
* </p>
*
* @author xwolf
* @date 2017-02-25 09:20
* @since V1.0.0
*/
@Controller
@RequestMapping("user")
@Slf4j
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("add")
@ResponseBody
public String insert(@RequestParam(value = "name",defaultValue = "")String name){
User user = new User();
user.setUname(name);
user.setBirth(new Date());
log.info("请求参数:{}",user);
return userService.insert(user);
}
@RequestMapping("list/{start}/{size}")
public PageInfo<User> getUserList(@PathVariable("start")int start,@PathVariable("size")int size){
PageHelper.startPage(start,size);
List<User> list= userService.getList();
return new PageInfo<>(list);
}
}
@@ -0,0 +1,20 @@
package com.xwolf.boot.dao;
import com.xwolf.boot.entity.User;
import java.util.List;
/**
* <p>
* </p>
*
* @author xwolf
* @date 2017-02-25 09:07
* @since V1.0.0
*/
public interface IUserDao {
int insert(User user);
List<User> queryList();
}
@@ -0,0 +1,23 @@
package com.xwolf.boot.entity;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
/**
* <p>
* </p>
*
* @author xwolf
* @date 2017-02-25 09:00
* @since V1.0.0
*/
@Data
@Slf4j
public class User {
private int uid;
private String uname;
private Date birth;
}
@@ -0,0 +1,20 @@
package com.xwolf.boot.service;
import com.xwolf.boot.entity.User;
import java.util.List;
/**
* <p>
* </p>
*
* @author xwolf
* @date 2017-02-25 09:16
* @since V1.0.0
*/
public interface IUserService {
String insert(User user);
List<User> getList();
}
@@ -0,0 +1,45 @@
package com.xwolf.boot.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.xwolf.boot.dao.IUserDao;
import com.xwolf.boot.entity.User;
import com.xwolf.boot.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* </p>
*
* @author xwolf
* @date 2017-02-25 09:17
* @since V1.0.0
*/
@Slf4j
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
@Override
public String insert(User user) {
int resultInt=userDao.insert(user);
JSONObject result = new JSONObject();
if(resultInt>0){
result.put("success",true);
result.put("msg","成功");
}else{
result.put("success",false);
result.put("msg","失败");
}
return result.toJSONString();
}
@Override
public List<User> getList() {
return userDao.queryList();
}
}
+48
View File
@@ -0,0 +1,48 @@
spring:
application:
name: boot
http:
encoding:
force: true
charset: UTF-8
enabled: true
#指定项目的运行环境,可自动启用或停止某些功能
profiles:
active: dev
datasource:
druid:
url: jdbc:mysql://127.0.0.1:3306/wifi2?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&createDatabaseIfNotExist=true
username: eap
password: eap@eap
filters: stat,slf4j
initialSize: 10
maxActive: 100
maxWait: 60000
minIdle: 5
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
logging:
config: classpath:logback.xml
# file: d:/logs/boot.log
server:
port: 8080
session:
timeout: 30
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.xwolf.boot.entity
check-config-location: true
config-location: classpath:mybatis.xml
+36
View File
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<jmxConfigurator />
<!-- 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
%msg%n</pattern>
</layout>
</appender>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/var/log/boot/boot.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>boot.log.%i.bak</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>12</MaxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1000MB</MaxFileSize>
</triggeringPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
%msg%n</Pattern>
</layout>
</appender>
<!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
<logger name="com.xwolf.boot">
<level value="DEBUG" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
</configuration>
+23
View File
@@ -0,0 +1,23 @@
<?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.xwolf.boot.dao.IUserDao" >
<resultMap id="baseResultMap" type="com.xwolf.boot.entity.User" >
<id column="uid" jdbcType="INTEGER" property="uid"/>
<result column="uname" property="uname" jdbcType="VARCHAR"/>
<result column="birth" property="birth" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column">
uid,uname,birth
</sql>
<insert id="insert" parameterType="com.xwolf.boot.entity.User" >
insert into user (uid, uname,birth)
values (#{uid,jdbcType=INTEGER}, #{uname,jdbcType=VARCHAR},#{birth,jdbcType=TIMESTAMP})
</insert>
<select id="queryList" resultMap="baseResultMap" >
select <include refid="Base_Column"/> from user
</select>
</mapper>
+38
View File
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 4.0.0以后版本可以不设置该参数 -->
<property name="dialect" value="mysql"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样-->
<property name="offsetAsPageNum" value="true"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="true"/>
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置 -->
<property name="params" value="pageNum=start;pageSize=limit;"/>
<!-- 支持通过Mapper接口参数来传递分页参数 -->
<property name="supportMethodsArguments" value="true"/>
<!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
</configuration>
@@ -0,0 +1,16 @@
package com.xwolf;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class BootApplicationTests {
@Test
public void contextLoads() {
}
}