mirror of
https://github.com/ityouknow/spring-boot-examples.git
synced 2026-06-05 20:39:19 +08:00
add 1.x
This commit is contained in:
73
1.x/README.md
Normal file
73
1.x/README.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# Spring Boot Examples
|
||||
|
||||
Demo website:http://www.ityouknow.com/
|
||||
|
||||
[Spring Cloud学习示例代码](https://github.com/ityouknow/spring-cloud-examples)
|
||||
|
||||
[Spring Boot 中文索引](https://github.com/ityouknow/awesome-spring-boot)
|
||||
|
||||
[参与贡献](https://github.com/ityouknow/spring-boot-examples/issues) | [English](README_EN.md)
|
||||
|
||||
**[github地址](https://github.com/ityouknow/spring-boot-examples)**
|
||||
|
||||
**[码云地址](https://gitee.com/ityouknow/spring-boot-examples)**
|
||||
|
||||
Spring boot使用的各种示例,以最简单、最实用为标准
|
||||
|
||||
|
||||
- [spring-boot-helloWorld](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-helloWorld):spring-boot的helloWorld版本
|
||||
- [spring-boot-mybaits-annotation](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-annotation):注解版本
|
||||
- [spring-boot-mybaits-xml](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-xml):xml配置版本
|
||||
- [spring-boot-mybatis-mulidatasource](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-mulidatasource):springboot+mybatis多数据源最简解决方案
|
||||
- [spring-boot-mybatis-annotation-mulidatasource](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-annotation-mulidatasource):springboot+mybatis(注解版)多数据源最简解决方案
|
||||
- [spring-boot-thymeleaf](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-thymeleaf):simple spring boot thymeleaf demo
|
||||
- [spring-boot-jpa-thymeleaf-curd](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-jpa-thymeleaf-curd):spring boot + jpa + thymeleaf 增删改查示例
|
||||
- [spring-boot-rabbitmq](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-rabbitmq):spring boot和rabbitmq各种消息应用案例
|
||||
- [spring-boot-scheduler](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-scheduler):spring boot和定时任务案例
|
||||
- [spring-boot-web](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-web):web开发综合使用案例
|
||||
- [spring-boot-mail](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mail):spring boot和邮件服务
|
||||
- [spring-boot-mongodb](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mongodb):spring boot和mongodb的使用
|
||||
- [spring-boot-multi-mongodb](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-multi-mongodb):spring boot和mongodb多数据源的使用
|
||||
- [spring-boot-package-war](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-package-war):spring-boot打包成war包示例
|
||||
- [spring-boot-shiro](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-shiro):springboot 整合shiro rbac示例
|
||||
- [spring-boot-file-upload](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-file-upload):使用Spring Boot 上传文件示例
|
||||
- [spring-boot-fastDFS](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-fastDFS):Spring Boot 整合FastDFS示例
|
||||
- [spring-boot-actuator](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-actuator):Spring Boot Actuator 使用示例
|
||||
- [spring-boot-admin-simple](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-admin-simple):Spring Boot Admin 的使用示例
|
||||
|
||||
**[Favorites-web](https://github.com/cloudfavorites/favorites-web):云收藏(springboot实战开源项目)**
|
||||
|
||||
|
||||
|
||||
参考文章:
|
||||
|
||||
- [springboot(一):入门篇](http://www.ityouknow.com/springboot/2016/01/06/springboot(%E4%B8%80)-%E5%85%A5%E9%97%A8%E7%AF%87.html)
|
||||
- [springboot(二):web综合开发](http://www.ityouknow.com/springboot/2016/02/03/springboot(%E4%BA%8C)-web%E7%BB%BC%E5%90%88%E5%BC%80%E5%8F%91.html)
|
||||
- [springboot(三):Spring boot中Redis的使用](http://www.ityouknow.com/springboot/2016/03/06/springboot(%E4%B8%89)-Spring-Boot%E4%B8%ADRedis%E7%9A%84%E4%BD%BF%E7%94%A8.html)
|
||||
- [springboot(四):thymeleaf使用详解](http://www.ityouknow.com/springboot/2016/05/01/springboot(%E5%9B%9B)-thymeleaf%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3.html)
|
||||
- [springboot(五):spring data jpa的使用](http://www.ityouknow.com/springboot/2016/08/20/springboot(%E4%BA%94)-spring-data-jpa%E7%9A%84%E4%BD%BF%E7%94%A8.html)
|
||||
- [springboot(六):如何优雅的使用mybatis](http://www.ityouknow.com/springboot/2016/11/06/springboot(%E5%85%AD)-%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E7%9A%84%E4%BD%BF%E7%94%A8mybatis.html)
|
||||
- [springboot(七):springboot+mybatis多数据源最简解决方案](http://www.ityouknow.com/springboot/2016/11/25/springboot(%E4%B8%83)-springboot+mybatis%E5%A4%9A%E6%95%B0%E6%8D%AE%E6%BA%90%E6%9C%80%E7%AE%80%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html)
|
||||
- [springboot(八):RabbitMQ详解](http://www.ityouknow.com/springboot/2016/11/30/springboot(%E5%85%AB)-RabbitMQ%E8%AF%A6%E8%A7%A3.html)
|
||||
- [springboot(九):定时任务](http://www.ityouknow.com/springboot/2016/12/02/springboot(%E4%B9%9D)-%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1.html)
|
||||
- [springboot(十):邮件服务](http://www.ityouknow.com/springboot/2017/05/06/springboot-mail.html)
|
||||
- [springboot(十一):Spring boot中mongodb的使用](http://www.ityouknow.com/springboot/2017/05/08/springboot-mongodb.html)
|
||||
- [springboot(十二):springboot如何测试打包部署](http://www.ityouknow.com/springboot/2017/05/09/springboot-deploy.html)
|
||||
- [springboot(十三):springboot小技巧](http://www.ityouknow.com/springboot/2017/06/22/springboot-tips.html)
|
||||
- [springboot(十四):springboot整合shiro-登录认证和权限管理](http://www.ityouknow.com/springboot/2017/06/26/springboot-shiro.html)
|
||||
- [springboot(十五):springboot+jpa+thymeleaf增删改查示例](http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html)
|
||||
- [springboot(十六):使用Jenkins部署Spring Boot](http://www.ityouknow.com/springboot/2017/11/11/springboot-jenkins.html)
|
||||
- [springboot(十七):使用Spring Boot上传文件](http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html)
|
||||
- [springboot(十八):使用Spring Boot集成FastDFS](http://www.ityouknow.com/springboot/2018/01/16/spring-boot-fastdfs.html)
|
||||
- [springboot(十九):使用Spring Boot Actuator监控应用](http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html)
|
||||
- [springboot(二十):使用spring-boot-admin对spring-boot服务进行监控](http://www.ityouknow.com/springboot/2018/02/11/spring-boot-admin.html)
|
||||
|
||||
**[springboot实战:我们的第一款开源项目](http://www.ityouknow.com/springboot/2016/09/26/springboot%E5%AE%9E%E6%88%98-%E6%88%91%E4%BB%AC%E7%9A%84%E7%AC%AC%E4%B8%80%E6%AC%BE%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6.html)**
|
||||
|
||||
> 如果大家想了解关于springboot的其它方面应用,也可以以[issues](https://github.com/ityouknow/spring-boot-examples/issues)的形式反馈给我,我后续来完善。
|
||||
|
||||
|
||||
关注公众号:纯洁的微笑,回复"springboot"进群交流
|
||||
|
||||

|
||||
|
||||
33
1.x/README_EN.md
Normal file
33
1.x/README_EN.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Spring Boot Examples
|
||||
|
||||
this is ablout learn Spring Boot Examples
|
||||
|
||||
Demo website:http://www.ityouknow.com/
|
||||
|
||||
[Spring Cloud example code](https://github.com/ityouknow/spring-cloud-examples)
|
||||
|
||||
[Contribution](https://github.com/ityouknow/spring-boot-examples/issues) | [中文](README.md)
|
||||
|
||||
Spring Boot Examples, Use the simplest and most useful scene demo.
|
||||
|
||||
- [spring-boot-helloWorld](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-helloWorld):Spring Boot helloWorld
|
||||
- [spring-boot-mybaits-annotation](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-annotation):Spring Boot use mybatis annotation
|
||||
- [spring-boot-mybaits-xml](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-xml):Spring Boot use mybatis xml
|
||||
- [spring-boot-mybatis-mulidatasource](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-mulidatasource):Spring Boot+mybatis+mulidatasource
|
||||
- [spring-boot-mybatis-annotation-mulidatasource](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis-annotation-mulidatasource):Spring Boot+ mybatis annotation + mulidatasource
|
||||
- [spring-boot-thymeleaf](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-thymeleaf):simple spring boot thymeleaf demo
|
||||
- [spring-boot-jpa-thymeleaf-curd](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-jpa-thymeleaf-curd):spring boot + jpa + thymeleaf curd demo
|
||||
- [spring-boot-rabbitmq](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-rabbitmq): using AMQP and RabbitMQ
|
||||
- [spring-boot-scheduler](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-scheduler):Timed tasks developed using Spring Boot
|
||||
- [spring-boot-web](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-web):Web projects developed using Spring Boot
|
||||
- [spring-boot-mail](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mail):Mail system developed using Spring Boot
|
||||
- [spring-boot-mongodb](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mongodb):Spring Boot + Mongodb
|
||||
- [spring-boot-multi-mongodb](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-multi-mongodb):Spring Boot + multiMongodb
|
||||
- [spring-boot-package-war](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-package-war):Spring Boot package war
|
||||
- [spring-boot-shiro](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-shiro):spring boot shiro rbac demo
|
||||
- [spring-boot-file-upload](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-file-upload):Spring Boot upload file demo
|
||||
- [spring-boot-fastDFS](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-fastDFS):Spring Boot Integrate FastDFS upload delete and so on
|
||||
- [spring-boot-actuator](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-actuator):Spring Boot Actuator demo
|
||||
- [spring-boot-admin-simple](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-admin-simple):Spring Boot Admin demo
|
||||
|
||||
**[Favorites-web](https://github.com/cloudfavorites/favorites-web):Open source projects developed using Spring Boot**
|
||||
59
1.x/spring-boot-actuator/pom.xml
Normal file
59
1.x/spring-boot-actuator/pom.xml
Normal file
@@ -0,0 +1,59 @@
|
||||
<?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>com.neo</groupId>
|
||||
<artifactId>spring-boot-actuator</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>spring-boot-actuator</name>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.9.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.neo;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class ActuatorApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ActuatorApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class HelloController {
|
||||
|
||||
@RequestMapping("/hello")
|
||||
public String index() {
|
||||
return "Hello World";
|
||||
}
|
||||
}
|
||||
15
1.x/spring-boot-actuator/src/main/resources/application.yml
Normal file
15
1.x/spring-boot-actuator/src/main/resources/application.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
server:
|
||||
port: 8080
|
||||
management:
|
||||
security:
|
||||
enabled: false #关掉安全认证
|
||||
port: 8088 #管理端口调整成8088
|
||||
context-path: /monitor #actuator的访问路径
|
||||
endpoints:
|
||||
shutdown:
|
||||
enabled: true
|
||||
|
||||
info:
|
||||
app:
|
||||
name: spring-boot-actuator
|
||||
version: 1.0.0
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.neo;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class ActuatorApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
System.out.println("hello word");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class HelloTests {
|
||||
|
||||
|
||||
private MockMvc mvc;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getHello() throws Exception {
|
||||
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().string(equalTo("Hello World")));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class HelloWorldControlerTests {
|
||||
|
||||
private MockMvc mvc;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getHello() throws Exception {
|
||||
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
|
||||
.andExpect(MockMvcResultMatchers.status().isOk())
|
||||
.andDo(MockMvcResultHandlers.print())
|
||||
.andReturn();
|
||||
}
|
||||
|
||||
}
|
||||
53
1.x/spring-boot-admin-simple/pom.xml
Normal file
53
1.x/spring-boot-admin-simple/pom.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?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>com.neo</groupId>
|
||||
<artifactId>spring-boot-admin-simple</artifactId>
|
||||
<version>1.0.0.BUILD-SNAPSHOT</version>
|
||||
|
||||
<modules>
|
||||
<module>spring-boot-admin-server</module>
|
||||
<module>spring-boot-admin-client</module>
|
||||
</modules>
|
||||
|
||||
<packaging>pom</packaging>
|
||||
<name>Spring boot admin</name>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.9.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<spring-cloud.version>Edgware.SR1</spring-cloud.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-dependencies</artifactId>
|
||||
<version>${spring-cloud.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?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>
|
||||
<parent>
|
||||
<groupId>com.neo</groupId>
|
||||
<artifactId>spring-boot-admin-simple</artifactId>
|
||||
<version>1.0.0.BUILD-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>spring-boot-admin-client</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>de.codecentric</groupId>
|
||||
<artifactId>spring-boot-admin-starter-client</artifactId>
|
||||
<version>1.5.6</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.neo;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class AdminClientApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AdminClientApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
server.port=8001
|
||||
|
||||
spring.boot.admin.url=http://localhost:8000
|
||||
management.security.enabled=false
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.neo;
|
||||
|
||||
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 AdminClientApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?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>
|
||||
<parent>
|
||||
<groupId>com.neo</groupId>
|
||||
<artifactId>spring-boot-admin-simple</artifactId>
|
||||
<version>1.0.0.BUILD-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>spring-boot-admin-server</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>de.codecentric</groupId>
|
||||
<artifactId>spring-boot-admin-server</artifactId>
|
||||
<version>1.5.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.codecentric</groupId>
|
||||
<artifactId>spring-boot-admin-server-ui</artifactId>
|
||||
<version>1.5.6</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.neo;
|
||||
|
||||
import de.codecentric.boot.admin.config.EnableAdminServer;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
@EnableAutoConfiguration
|
||||
@EnableAdminServer
|
||||
public class AdminServerApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AdminServerApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
server.port=8000
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.neo;
|
||||
|
||||
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 AdminServerApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
||||
52
1.x/spring-boot-fastDFS/pom.xml
Normal file
52
1.x/spring-boot-fastDFS/pom.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<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/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.neo</groupId>
|
||||
<artifactId>spring-boot-fastDFS</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0</version>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.9.RELEASE</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.csource</groupId>
|
||||
<artifactId>fastdfs-client-java</artifactId>
|
||||
<version>1.27-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.neo;
|
||||
|
||||
import org.apache.coyote.http11.AbstractHttp11Protocol;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
|
||||
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@SpringBootApplication
|
||||
public class FastDFSApplication {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SpringApplication.run(FastDFSApplication.class, args);
|
||||
}
|
||||
|
||||
//Tomcat large file upload connection reset
|
||||
@Bean
|
||||
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
|
||||
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
|
||||
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
|
||||
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
|
||||
//-1 means unlimited
|
||||
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
|
||||
}
|
||||
});
|
||||
return tomcat;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.multipart.MultipartException;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
@ControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
//https://jira.spring.io/browse/SPR-14651
|
||||
//4.3.5 supports RedirectAttributes redirectAttributes
|
||||
@ExceptionHandler(MultipartException.class)
|
||||
public String handleError1(MultipartException e, RedirectAttributes redirectAttributes) {
|
||||
|
||||
redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());
|
||||
return "redirect:/uploadStatus";
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import com.neo.fastdfs.FastDFSClient;
|
||||
import com.neo.fastdfs.FastDFSFile;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
@Controller
|
||||
public class UploadController {
|
||||
private static Logger logger = LoggerFactory.getLogger(UploadController.class);
|
||||
|
||||
@GetMapping("/")
|
||||
public String index() {
|
||||
return "upload";
|
||||
}
|
||||
|
||||
@PostMapping("/upload") //new annotation since 4.3
|
||||
public String singleFileUpload(@RequestParam("file") MultipartFile file,
|
||||
RedirectAttributes redirectAttributes) {
|
||||
if (file.isEmpty()) {
|
||||
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
|
||||
return "redirect:uploadStatus";
|
||||
}
|
||||
try {
|
||||
// Get the file and save it somewhere
|
||||
String path=saveFile(file);
|
||||
redirectAttributes.addFlashAttribute("message",
|
||||
"You successfully uploaded '" + file.getOriginalFilename() + "'");
|
||||
redirectAttributes.addFlashAttribute("path",
|
||||
"file path url '" + path + "'");
|
||||
} catch (Exception e) {
|
||||
logger.error("upload file failed",e);
|
||||
}
|
||||
return "redirect:/uploadStatus";
|
||||
}
|
||||
|
||||
@GetMapping("/uploadStatus")
|
||||
public String uploadStatus() {
|
||||
return "uploadStatus";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param multipartFile
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public String saveFile(MultipartFile multipartFile) throws IOException {
|
||||
String[] fileAbsolutePath={};
|
||||
String fileName=multipartFile.getOriginalFilename();
|
||||
String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
|
||||
byte[] file_buff = null;
|
||||
InputStream inputStream=multipartFile.getInputStream();
|
||||
if(inputStream!=null){
|
||||
int len1 = inputStream.available();
|
||||
file_buff = new byte[len1];
|
||||
inputStream.read(file_buff);
|
||||
}
|
||||
inputStream.close();
|
||||
FastDFSFile file = new FastDFSFile(fileName, file_buff, ext);
|
||||
try {
|
||||
fileAbsolutePath = FastDFSClient.upload(file); //upload to fastdfs
|
||||
} catch (Exception e) {
|
||||
logger.error("upload file Exception!",e);
|
||||
}
|
||||
if (fileAbsolutePath==null) {
|
||||
logger.error("upload file failed,please upload again!");
|
||||
}
|
||||
String path=FastDFSClient.getTrackerUrl()+fileAbsolutePath[0]+ "/"+fileAbsolutePath[1];
|
||||
return path;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.neo.fastdfs;
|
||||
|
||||
import org.csource.common.NameValuePair;
|
||||
import org.csource.fastdfs.*;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
public class FastDFSClient {
|
||||
private static org.slf4j.Logger logger = LoggerFactory.getLogger(FastDFSClient.class);
|
||||
private static TrackerClient trackerClient;
|
||||
private static TrackerServer trackerServer;
|
||||
private static StorageClient storageClient;
|
||||
private static StorageServer storageServer;
|
||||
|
||||
static {
|
||||
try {
|
||||
String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();;
|
||||
ClientGlobal.init(filePath);
|
||||
trackerClient = new TrackerClient();
|
||||
trackerServer = trackerClient.getConnection();
|
||||
storageServer = trackerClient.getStoreStorage(trackerServer);
|
||||
} catch (Exception e) {
|
||||
logger.error("FastDFS Client Init Fail!",e);
|
||||
}
|
||||
}
|
||||
|
||||
public static String[] upload(FastDFSFile file) {
|
||||
logger.info("File Name: " + file.getName() + "File Length:" + file.getContent().length);
|
||||
|
||||
NameValuePair[] meta_list = new NameValuePair[1];
|
||||
meta_list[0] = new NameValuePair("author", file.getAuthor());
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
String[] uploadResults = null;
|
||||
try {
|
||||
storageClient = new StorageClient(trackerServer, storageServer);
|
||||
uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
|
||||
} catch (IOException e) {
|
||||
logger.error("IO Exception when uploadind the file:" + file.getName(), e);
|
||||
} catch (Exception e) {
|
||||
logger.error("Non IO Exception when uploadind the file:" + file.getName(), e);
|
||||
}
|
||||
logger.info("upload_file time used:" + (System.currentTimeMillis() - startTime) + " ms");
|
||||
|
||||
if (uploadResults == null) {
|
||||
logger.error("upload file fail, error code:" + storageClient.getErrorCode());
|
||||
}
|
||||
String groupName = uploadResults[0];
|
||||
String remoteFileName = uploadResults[1];
|
||||
|
||||
logger.info("upload file successfully!!!" + "group_name:" + groupName + ", remoteFileName:" + " " + remoteFileName);
|
||||
return uploadResults;
|
||||
}
|
||||
|
||||
public static FileInfo getFile(String groupName, String remoteFileName) {
|
||||
try {
|
||||
storageClient = new StorageClient(trackerServer, storageServer);
|
||||
return storageClient.get_file_info(groupName, remoteFileName);
|
||||
} catch (IOException e) {
|
||||
logger.error("IO Exception: Get File from Fast DFS failed", e);
|
||||
} catch (Exception e) {
|
||||
logger.error("Non IO Exception: Get File from Fast DFS failed", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static InputStream downFile(String groupName, String remoteFileName) {
|
||||
try {
|
||||
storageClient = new StorageClient(trackerServer, storageServer);
|
||||
byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
|
||||
InputStream ins = new ByteArrayInputStream(fileByte);
|
||||
return ins;
|
||||
} catch (IOException e) {
|
||||
logger.error("IO Exception: Get File from Fast DFS failed", e);
|
||||
} catch (Exception e) {
|
||||
logger.error("Non IO Exception: Get File from Fast DFS failed", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void deleteFile(String groupName, String remoteFileName)
|
||||
throws Exception {
|
||||
storageClient = new StorageClient(trackerServer, storageServer);
|
||||
int i = storageClient.delete_file(groupName, remoteFileName);
|
||||
logger.info("delete file successfully!!!" + i);
|
||||
}
|
||||
|
||||
public static StorageServer[] getStoreStorages(String groupName)
|
||||
throws IOException {
|
||||
return trackerClient.getStoreStorages(trackerServer, groupName);
|
||||
}
|
||||
|
||||
public static ServerInfo[] getFetchStorages(String groupName,
|
||||
String remoteFileName) throws IOException {
|
||||
return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
|
||||
}
|
||||
|
||||
public static String getTrackerUrl() {
|
||||
return "http://"+trackerServer.getInetSocketAddress().getHostString()+":"+ClientGlobal.getG_tracker_http_port()+"/";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.neo.fastdfs;
|
||||
|
||||
public class FastDFSFile {
|
||||
private String name;
|
||||
|
||||
private byte[] content;
|
||||
|
||||
private String ext;
|
||||
|
||||
private String md5;
|
||||
|
||||
private String author;
|
||||
|
||||
public FastDFSFile(String name, byte[] content, String ext, String height,
|
||||
String width, String author) {
|
||||
super();
|
||||
this.name = name;
|
||||
this.content = content;
|
||||
this.ext = ext;
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public FastDFSFile(String name, byte[] content, String ext) {
|
||||
super();
|
||||
this.name = name;
|
||||
this.content = content;
|
||||
this.ext = ext;
|
||||
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public byte[] getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(byte[] content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public String getExt() {
|
||||
return ext;
|
||||
}
|
||||
|
||||
public void setExt(String ext) {
|
||||
this.ext = ext;
|
||||
}
|
||||
|
||||
public String getMd5() {
|
||||
return md5;
|
||||
}
|
||||
|
||||
public void setMd5(String md5) {
|
||||
this.md5 = md5;
|
||||
}
|
||||
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
#http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
|
||||
#search multipart
|
||||
spring.http.multipart.max-file-size=10MB
|
||||
spring.http.multipart.max-request-size=10MB
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
connect_timeout = 60
|
||||
network_timeout = 60
|
||||
charset = UTF-8
|
||||
http.tracker_http_port = 8080
|
||||
http.anti_steal_token = no
|
||||
http.secret_key = 123456
|
||||
|
||||
tracker_server = 192.168.53.85:22122
|
||||
tracker_server = 192.168.53.86:22122
|
||||
24
1.x/spring-boot-fastDFS/src/main/resources/logback.xml
Normal file
24
1.x/spring-boot-fastDFS/src/main/resources/logback.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?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{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
|
||||
</Pattern>
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<logger name="org.springframework.web" level="error" additivity="false">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</logger>
|
||||
|
||||
<logger name="com.neo" level="debug" additivity="false">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</logger>
|
||||
|
||||
<root level="error">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
@@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
<body>
|
||||
|
||||
<h1>Spring Boot file upload example</h1>
|
||||
|
||||
<form method="POST" action="/upload" enctype="multipart/form-data">
|
||||
<input type="file" name="file" /><br/><br/>
|
||||
<input type="submit" value="Submit" />
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<body>
|
||||
|
||||
<h1>Spring Boot - Upload Status</h1>
|
||||
|
||||
<div th:if="${message}">
|
||||
<h2 th:text="${message}"/>
|
||||
</div>
|
||||
|
||||
<div th:if="${path}">
|
||||
<h2 th:text="${path}"/>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
48
1.x/spring-boot-file-upload/pom.xml
Normal file
48
1.x/spring-boot-file-upload/pom.xml
Normal file
@@ -0,0 +1,48 @@
|
||||
<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/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.neo</groupId>
|
||||
<artifactId>spring-boot-file-upload</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0</version>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.9.RELEASE</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.neo;
|
||||
|
||||
import org.apache.coyote.http11.AbstractHttp11Protocol;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
|
||||
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@SpringBootApplication
|
||||
public class FileUploadWebApplication {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SpringApplication.run(FileUploadWebApplication.class, args);
|
||||
}
|
||||
|
||||
//Tomcat large file upload connection reset
|
||||
@Bean
|
||||
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
|
||||
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
|
||||
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
|
||||
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
|
||||
//-1 means unlimited
|
||||
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
|
||||
}
|
||||
});
|
||||
return tomcat;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.multipart.MultipartException;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
@ControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
//https://jira.spring.io/browse/SPR-14651
|
||||
//4.3.5 supports RedirectAttributes redirectAttributes
|
||||
@ExceptionHandler(MultipartException.class)
|
||||
public String handleError1(MultipartException e, RedirectAttributes redirectAttributes) {
|
||||
redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());
|
||||
return "redirect:/uploadStatus";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
@Controller
|
||||
public class UploadController {
|
||||
//Save the uploaded file to this folder
|
||||
private static String UPLOADED_FOLDER = "E://temp//";
|
||||
|
||||
@GetMapping("/")
|
||||
public String index() {
|
||||
return "upload";
|
||||
}
|
||||
|
||||
@PostMapping("/upload") // //new annotation since 4.3
|
||||
public String singleFileUpload(@RequestParam("file") MultipartFile file,
|
||||
RedirectAttributes redirectAttributes) {
|
||||
if (file.isEmpty()) {
|
||||
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
|
||||
return "redirect:uploadStatus";
|
||||
}
|
||||
|
||||
try {
|
||||
// Get the file and save it somewhere
|
||||
byte[] bytes = file.getBytes();
|
||||
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
|
||||
Files.write(path, bytes);
|
||||
|
||||
redirectAttributes.addFlashAttribute("message",
|
||||
"You successfully uploaded '" + file.getOriginalFilename() + "'");
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return "redirect:/uploadStatus";
|
||||
}
|
||||
|
||||
@GetMapping("/uploadStatus")
|
||||
public String uploadStatus() {
|
||||
return "uploadStatus";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
#http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
|
||||
#search multipart
|
||||
spring.http.multipart.max-file-size=10MB
|
||||
spring.http.multipart.max-request-size=10MB
|
||||
|
||||
#spring.http.multipart.enabled=true #\u9ED8\u8BA4\u652F\u6301\u6587\u4EF6\u4E0A\u4F20.
|
||||
#spring.http.multipart.file-size-threshold=0 #\u652F\u6301\u6587\u4EF6\u5199\u5165\u78C1\u76D8.
|
||||
#spring.http.multipart.location= # \u4E0A\u4F20\u6587\u4EF6\u7684\u4E34\u65F6\u76EE\u5F55
|
||||
#spring.http.multipart.max-file-size=1Mb # \u6700\u5927\u652F\u6301\u6587\u4EF6\u5927\u5C0F
|
||||
#spring.http.multipart.max-request-size=10Mb # \u6700\u5927\u652F\u6301\u8BF7\u6C42\u5927\u5C0F
|
||||
|
||||
24
1.x/spring-boot-file-upload/src/main/resources/logback.xml
Normal file
24
1.x/spring-boot-file-upload/src/main/resources/logback.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?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{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
|
||||
</Pattern>
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<logger name="org.springframework.web" level="error" additivity="false">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</logger>
|
||||
|
||||
<logger name="com.neo" level="debug" additivity="false">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</logger>
|
||||
|
||||
<root level="error">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
@@ -0,0 +1,51 @@
|
||||
<form id='myupload' action='http://localhost:8080/uploadSign' method='post' enctype='multipart/form-data'>
|
||||
<div class="demo">
|
||||
<div class="btn">
|
||||
<span>添加附件</span>
|
||||
<input id="fileupload" type="file" name="file1"></div>
|
||||
<div class="progress">
|
||||
<span class="bar"></span>
|
||||
<span class="percent">0%</span></div>
|
||||
<!-- 显示已上传的文件名 -->
|
||||
<div class="files"></div>
|
||||
<!-- 显示已上传的图片-->
|
||||
<div class="showimg"></div>
|
||||
</div>
|
||||
<input type="submit" onclick="gosubmit2()" /></form>
|
||||
<script src="https://cdn.bootcss.com/jquery/1.6.4/jquery.js"></script>
|
||||
<script type="text/javascript" src="https://cdn.bootcss.com/jquery.form/4.1.0/jquery.form.min.js"></script>
|
||||
<script type="text/javascript">var bar = $('.bar'); //进度条
|
||||
var percent = $('.percent'); //获取上传百分比
|
||||
var showimg = $('.showimg'); //显示图片的div
|
||||
var progress = $('.progress'); //显示进度的div
|
||||
var files = $('.files'); //文件上传控件的input元素
|
||||
var btn = $('.btn span'); //按钮文本
|
||||
function gosubmit2() {
|
||||
$("#myupload").ajaxSubmit({
|
||||
dataType: 'json',
|
||||
//返回数据类型
|
||||
beforeSend: function() {
|
||||
showimg.empty();
|
||||
progress.show();
|
||||
var percentVal = '0%';
|
||||
bar.width(percentVal);
|
||||
percent.html(percentVal);
|
||||
btn.html('上传中..');
|
||||
},
|
||||
//更新进度条事件处理代码
|
||||
uploadProgress: function(event, position, total, percentComplete) {
|
||||
var percentVal = percentComplete + '%';
|
||||
bar.width(percentVal);
|
||||
percent.html(percentVal);
|
||||
},
|
||||
success: function(data) { //图片上传成功时
|
||||
//获取服务器端返回的文件数据
|
||||
alert(data.name + "," + data.pic + "," + data.size);
|
||||
},
|
||||
error: function(xhr) {
|
||||
btn.html(上传失败);
|
||||
bar.width('0');
|
||||
files.html(xhr.responseText);
|
||||
}
|
||||
});
|
||||
}</script>
|
||||
@@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
<body>
|
||||
|
||||
<h1>Spring Boot file upload example</h1>
|
||||
|
||||
<form method="POST" action="/upload" enctype="multipart/form-data">
|
||||
<input type="file" name="file" /><br/><br/>
|
||||
<input type="submit" value="Submit" />
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<body>
|
||||
|
||||
<h1>Spring Boot - Upload Status</h1>
|
||||
|
||||
<div th:if="${message}">
|
||||
<h2 th:text="${message}"/>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
62
1.x/spring-boot-helloWorld/pom.xml
Normal file
62
1.x/spring-boot-helloWorld/pom.xml
Normal file
@@ -0,0 +1,62 @@
|
||||
<?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>com.neo</groupId>
|
||||
<artifactId>spring-boot-helloworld</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>spring-boot-helloworld</name>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.6.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.neo;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class HelloWorldController {
|
||||
|
||||
@RequestMapping("/hello")
|
||||
public String index() {
|
||||
return "Hello World";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.neo;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class ApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
System.out.println("hello word");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.mock.web.MockServletContext;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.context.web.WebAppConfiguration;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class HelloTests {
|
||||
|
||||
|
||||
private MockMvc mvc;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getHello() throws Exception {
|
||||
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().string(equalTo("Hello World")));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.neo.controller;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.mock.web.MockServletContext;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.context.web.WebAppConfiguration;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class HelloWorldControlerTests {
|
||||
|
||||
private MockMvc mvc;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getHello() throws Exception {
|
||||
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
|
||||
.andExpect(MockMvcResultMatchers.status().isOk())
|
||||
.andDo(MockMvcResultHandlers.print())
|
||||
.andReturn();
|
||||
}
|
||||
|
||||
}
|
||||
51
1.x/spring-boot-jpa-thymeleaf-curd/pom.xml
Normal file
51
1.x/spring-boot-jpa-thymeleaf-curd/pom.xml
Normal file
@@ -0,0 +1,51 @@
|
||||
<?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>
|
||||
<artifactId>spring-boot-jpa-thymeleaf-curd</artifactId>
|
||||
<name>spring-boot-jpa-thymeleaf-curd</name>
|
||||
<description>spring-boot-jpa-thymeleaf-curd</description>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.6.RELEASE</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.neo;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.support.SpringBootServletInitializer;
|
||||
|
||||
|
||||
@SpringBootApplication
|
||||
public class JpaThymeleafApplication extends SpringBootServletInitializer {
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
|
||||
return application.sources(JpaThymeleafApplication.class);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SpringApplication.run(JpaThymeleafApplication.class, args);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.neo.entity;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
|
||||
@Entity
|
||||
public class User {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private long id;
|
||||
@Column(nullable = false, unique = true)
|
||||
private String userName;
|
||||
@Column(nullable = false)
|
||||
private String password;
|
||||
@Column(nullable = false)
|
||||
private int age;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public User setId(long id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
|
||||
public User setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public User setPassword(String password) {
|
||||
this.password = password;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
public User setAge(int age) {
|
||||
this.age = age;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.neo.repository;
|
||||
|
||||
import com.neo.entity.User;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface UserRepository extends JpaRepository<User, Long> {
|
||||
|
||||
User findById(long id);
|
||||
|
||||
Long deleteById(Long id);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.neo.service;
|
||||
|
||||
import com.neo.entity.User;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface UserService {
|
||||
|
||||
public List<User> getUserList();
|
||||
|
||||
public User findUserById(long id);
|
||||
|
||||
public void save(User user);
|
||||
|
||||
public void edit(User user);
|
||||
|
||||
public void delete(long id);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.neo.service.impl;
|
||||
|
||||
import com.neo.entity.User;
|
||||
import com.neo.repository.UserRepository;
|
||||
import com.neo.service.UserService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class UserServiceImpl implements UserService{
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Override
|
||||
public List<User> getUserList() {
|
||||
return userRepository.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public User findUserById(long id) {
|
||||
return userRepository.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(User user) {
|
||||
userRepository.save(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void edit(User user) {
|
||||
userRepository.save(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(long id) {
|
||||
userRepository.delete(id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.neo.web;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
@Controller
|
||||
public class HelloController {
|
||||
|
||||
@RequestMapping("/hello")
|
||||
public String hello(Model model, @RequestParam(value="name", required=false, defaultValue="World") String name) {
|
||||
model.addAttribute("name", name);
|
||||
return "hello";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.neo.web;
|
||||
|
||||
import com.neo.entity.User;
|
||||
import com.neo.service.UserService;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@Controller
|
||||
public class UserController {
|
||||
|
||||
@Resource
|
||||
UserService userService;
|
||||
|
||||
|
||||
@RequestMapping("/")
|
||||
public String index() {
|
||||
return "redirect:/list";
|
||||
}
|
||||
|
||||
@RequestMapping("/list")
|
||||
public String list(Model model) {
|
||||
List<User> users=userService.getUserList();
|
||||
model.addAttribute("users", users);
|
||||
return "user/list";
|
||||
}
|
||||
|
||||
@RequestMapping("/toAdd")
|
||||
public String toAdd() {
|
||||
return "user/userAdd";
|
||||
}
|
||||
|
||||
@RequestMapping("/add")
|
||||
public String add(User user) {
|
||||
userService.save(user);
|
||||
return "redirect:/list";
|
||||
}
|
||||
|
||||
@RequestMapping("/toEdit")
|
||||
public String toEdit(Model model,Long id) {
|
||||
User user=userService.findUserById(id);
|
||||
model.addAttribute("user", user);
|
||||
return "user/userEdit";
|
||||
}
|
||||
|
||||
@RequestMapping("/edit")
|
||||
public String edit(User user) {
|
||||
userService.edit(user);
|
||||
return "redirect:/list";
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/delete")
|
||||
public String delete(Long id) {
|
||||
userService.delete(id);
|
||||
return "redirect:/list";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
spring.datasource.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=root
|
||||
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
|
||||
|
||||
spring.jpa.properties.hibernate.hbm2ddl.auto=update
|
||||
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
|
||||
spring.jpa.show-sql= true
|
||||
|
||||
spring.thymeleaf.cache=false
|
||||
6760
1.x/spring-boot-jpa-thymeleaf-curd/src/main/resources/static/css/bootstrap.css
vendored
Normal file
6760
1.x/spring-boot-jpa-thymeleaf-curd/src/main/resources/static/css/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>Hello Thymeleaf!</title>
|
||||
</head>
|
||||
<body>
|
||||
<p th:text="'Hello, ' + ${name} + '!'" />
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>userList</title>
|
||||
<link rel="stylesheet" th:href="@{/css/bootstrap.css}"></link>
|
||||
</head>
|
||||
<body class="container">
|
||||
<br/>
|
||||
<h1>用户列表</h1>
|
||||
<br/><br/>
|
||||
<div class="with:80%">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>User Name</th>
|
||||
<th>Password</th>
|
||||
<th>Age</th>
|
||||
<th>Edit</th>
|
||||
<th>Delete</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="user : ${users}">
|
||||
<th scope="row" th:text="${user.id}">1</th>
|
||||
<td th:text="${user.userName}">neo</td>
|
||||
<td th:text="${user.password}">Otto</td>
|
||||
<td th:text="${user.age}">6</td>
|
||||
<td><a th:href="@{/toEdit(id=${user.id})}">edit</a></td>
|
||||
<td><a th:href="@{/delete(id=${user.id})}">delete</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">
|
||||
<a href="/toAdd" th:href="@{/toAdd}" class="btn btn-info">add</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>user</title>
|
||||
<link rel="stylesheet" th:href="@{/css/bootstrap.css}"></link>
|
||||
</head>
|
||||
<body class="container">
|
||||
<br/>
|
||||
<h1>添加用户</h1>
|
||||
<br/><br/>
|
||||
<div class="with:80%">
|
||||
<form class="form-horizontal" th:action="@{/add}" method="post">
|
||||
<div class="form-group">
|
||||
<label for="userName" class="col-sm-2 control-label">userName</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="userName" id="userName" placeholder="userName"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password" class="col-sm-2 control-label" >Password</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" class="form-control" name="password" id="password" placeholder="Password"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="age" class="col-sm-2 control-label">age</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="age" id="age" placeholder="age"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<input type="submit" value="Submit" class="btn btn-info" />
|
||||
|
||||
<input type="reset" value="Reset" class="btn btn-info" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,44 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>user</title>
|
||||
<link rel="stylesheet" th:href="@{/css/bootstrap.css}"></link>
|
||||
</head>
|
||||
<body class="container">
|
||||
<br/>
|
||||
<h1>修改用户</h1>
|
||||
<br/><br/>
|
||||
<div class="with:80%">
|
||||
<form class="form-horizontal" th:action="@{/edit}" th:object="${user}" method="post">
|
||||
<input type="hidden" name="id" th:value="*{id}" />
|
||||
<div class="form-group">
|
||||
<label for="userName" class="col-sm-2 control-label">userName</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="userName" id="userName" th:value="*{userName}" placeholder="userName"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password" class="col-sm-2 control-label" >Password</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" class="form-control" name="password" id="password" th:value="*{password}" placeholder="Password"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="age" class="col-sm-2 control-label">age</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="age" id="age" th:value="*{age}" placeholder="age"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<input type="submit" value="Submit" class="btn btn-info" />
|
||||
|
||||
<a href="/toAdd" th:href="@{/list}" class="btn btn-info">Back</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
75
1.x/spring-boot-mail/pom.xml
Normal file
75
1.x/spring-boot-mail/pom.xml
Normal file
@@ -0,0 +1,75 @@
|
||||
<?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>com.neo</groupId>
|
||||
<artifactId>spring-boot-mail</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>spring-boot-mail</name>
|
||||
<description>Demo project for Spring Boot and mail</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.3.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</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-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
<version>RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>javax.mail</artifactId>
|
||||
<version>RELEASE</version>
|
||||
</dependency>
|
||||
<!-- 模板引擎 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
13
1.x/spring-boot-mail/src/main/java/com/neo/Application.java
Normal file
13
1.x/spring-boot-mail/src/main/java/com/neo/Application.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.neo;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.neo.service;
|
||||
|
||||
/**
|
||||
* Created by summer on 2017/5/4.
|
||||
*/
|
||||
public interface MailService {
|
||||
|
||||
public void sendSimpleMail(String to, String subject, String content);
|
||||
|
||||
public void sendHtmlMail(String to, String subject, String content);
|
||||
|
||||
public void sendAttachmentsMail(String to, String subject, String content, String filePath);
|
||||
|
||||
public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
package com.neo.service.impl;
|
||||
|
||||
import com.neo.service.MailService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.mail.SimpleMailMessage;
|
||||
import org.springframework.mail.javamail.JavaMailSender;
|
||||
import org.springframework.mail.javamail.MimeMessageHelper;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.internet.MimeMessage;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Created by summer on 2017/5/4.
|
||||
*/
|
||||
@Component
|
||||
public class MailServiceImpl implements MailService{
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
@Autowired
|
||||
private JavaMailSender mailSender;
|
||||
|
||||
@Value("${mail.fromMail.addr}")
|
||||
private String from;
|
||||
|
||||
/**
|
||||
* 发送文本邮件
|
||||
* @param to
|
||||
* @param subject
|
||||
* @param content
|
||||
*/
|
||||
@Override
|
||||
public void sendSimpleMail(String to, String subject, String content) {
|
||||
SimpleMailMessage message = new SimpleMailMessage();
|
||||
message.setFrom(from);
|
||||
message.setTo(to);
|
||||
message.setSubject(subject);
|
||||
message.setText(content);
|
||||
|
||||
try {
|
||||
mailSender.send(message);
|
||||
logger.info("简单邮件已经发送。");
|
||||
} catch (Exception e) {
|
||||
logger.error("发送简单邮件时发生异常!", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送html邮件
|
||||
* @param to
|
||||
* @param subject
|
||||
* @param content
|
||||
*/
|
||||
@Override
|
||||
public void sendHtmlMail(String to, String subject, String content) {
|
||||
MimeMessage message = mailSender.createMimeMessage();
|
||||
|
||||
try {
|
||||
//true表示需要创建一个multipart message
|
||||
MimeMessageHelper helper = new MimeMessageHelper(message, true);
|
||||
helper.setFrom(from);
|
||||
helper.setTo(to);
|
||||
helper.setSubject(subject);
|
||||
helper.setText(content, true);
|
||||
|
||||
mailSender.send(message);
|
||||
logger.info("html邮件发送成功");
|
||||
} catch (MessagingException e) {
|
||||
logger.error("发送html邮件时发生异常!", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 发送带附件的邮件
|
||||
* @param to
|
||||
* @param subject
|
||||
* @param content
|
||||
* @param filePath
|
||||
*/
|
||||
public void sendAttachmentsMail(String to, String subject, String content, String filePath){
|
||||
MimeMessage message = mailSender.createMimeMessage();
|
||||
|
||||
try {
|
||||
MimeMessageHelper helper = new MimeMessageHelper(message, true);
|
||||
helper.setFrom(from);
|
||||
helper.setTo(to);
|
||||
helper.setSubject(subject);
|
||||
helper.setText(content, true);
|
||||
|
||||
FileSystemResource file = new FileSystemResource(new File(filePath));
|
||||
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
|
||||
helper.addAttachment(fileName, file);
|
||||
//helper.addAttachment("test"+fileName, file);
|
||||
|
||||
mailSender.send(message);
|
||||
logger.info("带附件的邮件已经发送。");
|
||||
} catch (MessagingException e) {
|
||||
logger.error("发送带附件的邮件时发生异常!", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 发送正文中有静态资源(图片)的邮件
|
||||
* @param to
|
||||
* @param subject
|
||||
* @param content
|
||||
* @param rscPath
|
||||
* @param rscId
|
||||
*/
|
||||
public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
|
||||
MimeMessage message = mailSender.createMimeMessage();
|
||||
|
||||
try {
|
||||
MimeMessageHelper helper = new MimeMessageHelper(message, true);
|
||||
helper.setFrom(from);
|
||||
helper.setTo(to);
|
||||
helper.setSubject(subject);
|
||||
helper.setText(content, true);
|
||||
|
||||
FileSystemResource res = new FileSystemResource(new File(rscPath));
|
||||
helper.addInline(rscId, res);
|
||||
|
||||
mailSender.send(message);
|
||||
logger.info("嵌入静态资源的邮件已经发送。");
|
||||
} catch (MessagingException e) {
|
||||
logger.error("发送嵌入静态资源的邮件时发生异常!", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
spring.application.name=spirng-boot-mail
|
||||
|
||||
spring.mail.host=smtp.163.com
|
||||
spring.mail.username=xxoo@xxoo.com
|
||||
spring.mail.password=xxoo
|
||||
spring.mail.default-encoding=UTF-8
|
||||
|
||||
mail.fromMail.addr=xxoo@xxoo.com
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
您好,这是验证邮件,请点击下面的链接完成验证,<br/>
|
||||
<a href="#" th:href="@{ http://www.ityouknow.com/neo/{id}(id=${id}) }">激活账号</a>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.neo;
|
||||
|
||||
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 ApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
System.out.println("hello world");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.neo.service;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.thymeleaf.TemplateEngine;
|
||||
import org.thymeleaf.context.Context;
|
||||
|
||||
/**
|
||||
* Created by summer on 2017/5/4.
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class MailServiceTest {
|
||||
|
||||
@Autowired
|
||||
private MailService mailService;
|
||||
|
||||
@Autowired
|
||||
private TemplateEngine templateEngine;
|
||||
|
||||
@Test
|
||||
public void testSimpleMail() throws Exception {
|
||||
mailService.sendSimpleMail("ityouknow@126.com","test simple mail"," hello this is simple mail");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHtmlMail() throws Exception {
|
||||
String content="<html>\n" +
|
||||
"<body>\n" +
|
||||
" <h3>hello world ! 这是一封html邮件!</h3>\n" +
|
||||
"</body>\n" +
|
||||
"</html>";
|
||||
mailService.sendHtmlMail("ityouknow@126.com","test simple mail",content);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sendAttachmentsMail() {
|
||||
String filePath="e:\\tmp\\application.log";
|
||||
mailService.sendAttachmentsMail("ityouknow@126.com", "主题:带附件的邮件", "有附件,请查收!", filePath);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void sendInlineResourceMail() {
|
||||
String rscId = "neo006";
|
||||
String content="<html><body>这是有图片的邮件:<img src=\'cid:" + rscId + "\' ></body></html>";
|
||||
String imgPath = "C:\\Users\\summer\\Pictures\\favicon.png";
|
||||
|
||||
mailService.sendInlineResourceMail("ityouknow@126.com", "主题:这是有图片的邮件", content, imgPath, rscId);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void sendTemplateMail() {
|
||||
//创建邮件正文
|
||||
Context context = new Context();
|
||||
context.setVariable("id", "006");
|
||||
String emailContent = templateEngine.process("emailTemplate", context);
|
||||
|
||||
mailService.sendHtmlMail("ityouknow@126.com","主题:这是模板邮件",emailContent);
|
||||
}
|
||||
}
|
||||
60
1.x/spring-boot-mongodb/pom.xml
Normal file
60
1.x/spring-boot-mongodb/pom.xml
Normal file
@@ -0,0 +1,60 @@
|
||||
<?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>com.neo</groupId>
|
||||
<artifactId>spring-boot-mongodb</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>spring-boot-mongodb</name>
|
||||
<description>Demo project for Spring Boot and mongodb</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.3.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-mongodb</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.neo;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.neo.dao;
|
||||
|
||||
import com.neo.entity.UserEntity;
|
||||
|
||||
/**
|
||||
* Created by summer on 2017/5/5.
|
||||
*/
|
||||
public interface UserDao {
|
||||
|
||||
public void saveUser(UserEntity user);
|
||||
|
||||
public UserEntity findUserByUserName(String userName);
|
||||
|
||||
public int updateUser(UserEntity user);
|
||||
|
||||
public void deleteUserById(Long id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.neo.dao.impl;
|
||||
|
||||
import com.mongodb.WriteResult;
|
||||
import com.neo.dao.UserDao;
|
||||
import com.neo.entity.UserEntity;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.security.SecurityProperties;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.data.mongodb.core.query.Update;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Created by summer on 2017/5/5.
|
||||
*/
|
||||
@Component
|
||||
public class UserDaoImpl implements UserDao {
|
||||
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
|
||||
/**
|
||||
* 创建对象
|
||||
* @param user
|
||||
*/
|
||||
@Override
|
||||
public void saveUser(UserEntity user) {
|
||||
mongoTemplate.save(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户名查询对象
|
||||
* @param userName
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public UserEntity findUserByUserName(String userName) {
|
||||
Query query=new Query(Criteria.where("userName").is(userName));
|
||||
UserEntity user = mongoTemplate.findOne(query , UserEntity.class);
|
||||
return user;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新对象
|
||||
* @param user
|
||||
*/
|
||||
@Override
|
||||
public int updateUser(UserEntity user) {
|
||||
Query query=new Query(Criteria.where("id").is(user.getId()));
|
||||
Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
|
||||
//更新查询返回结果集的第一条
|
||||
WriteResult result =mongoTemplate.updateFirst(query,update,UserEntity.class);
|
||||
//更新查询返回结果集的所有
|
||||
// mongoTemplate.updateMulti(query,update,UserEntity.class);
|
||||
if(result!=null)
|
||||
return result.getN();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除对象
|
||||
* @param id
|
||||
*/
|
||||
@Override
|
||||
public void deleteUserById(Long id) {
|
||||
Query query=new Query(Criteria.where("id").is(id));
|
||||
mongoTemplate.remove(query,UserEntity.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.neo.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Created by summer on 2017/5/5.
|
||||
*/
|
||||
public class UserEntity implements Serializable {
|
||||
private static final long serialVersionUID = -3258839839160856613L;
|
||||
private Long id;
|
||||
private String userName;
|
||||
private String passWord;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public String getPassWord() {
|
||||
return passWord;
|
||||
}
|
||||
|
||||
public void setPassWord(String passWord) {
|
||||
this.passWord = passWord;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "UserEntity{" +
|
||||
"id=" + id +
|
||||
", userName='" + userName + '\'' +
|
||||
", passWord='" + passWord + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
spring.application.name=spirng-boot-mongodb
|
||||
|
||||
spring.data.mongodb.uri=mongodb://192.168.9.61:20000/test
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.neo;
|
||||
|
||||
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 ApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
System.out.println("hello world");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.neo.dao;
|
||||
|
||||
import com.neo.entity.UserEntity;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
/**
|
||||
* Created by summer on 2017/5/5.
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class UserDaoTest {
|
||||
|
||||
@Autowired
|
||||
private UserDao userDao;
|
||||
|
||||
@Test
|
||||
public void testSaveUser() throws Exception {
|
||||
UserEntity user=new UserEntity();
|
||||
user.setId(2l);
|
||||
user.setUserName("小明");
|
||||
user.setPassWord("fffooo123");
|
||||
userDao.saveUser(user);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findUserByUserName(){
|
||||
UserEntity user= userDao.findUserByUserName("小明");
|
||||
System.out.println("user is "+user);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateUser(){
|
||||
UserEntity user=new UserEntity();
|
||||
user.setId(2l);
|
||||
user.setUserName("天空");
|
||||
user.setPassWord("fffxxxx");
|
||||
userDao.updateUser(user);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void deleteUserById(){
|
||||
userDao.deleteUserById(1l);
|
||||
}
|
||||
|
||||
}
|
||||
60
1.x/spring-boot-multi-mongodb/pom.xml
Normal file
60
1.x/spring-boot-multi-mongodb/pom.xml
Normal file
@@ -0,0 +1,60 @@
|
||||
<?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>com.neo</groupId>
|
||||
<artifactId>spring-boot-multi-mongodb</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>spring-boot-multi-mongodb</name>
|
||||
<description>Demo project for Spring Boot and multi mongodb</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.3.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-mongodb</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||
<version>RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.neo;
|
||||
|
||||
import com.neo.config.props.MultipleMongoProperties;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@EnableConfigurationProperties(MultipleMongoProperties.class)
|
||||
@SpringBootApplication(exclude = MongoAutoConfiguration.class)
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.neo.config;
|
||||
|
||||
import com.mongodb.MongoClient;
|
||||
import com.neo.config.props.MultipleMongoProperties;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.data.mongodb.MongoDbFactory;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
@Configuration
|
||||
public class MultipleMongoConfig {
|
||||
|
||||
@Autowired
|
||||
private MultipleMongoProperties mongoProperties;
|
||||
|
||||
@Primary
|
||||
@Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
|
||||
public MongoTemplate primaryMongoTemplate() throws Exception {
|
||||
return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
|
||||
public MongoTemplate secondaryMongoTemplate() throws Exception {
|
||||
return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {
|
||||
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
|
||||
mongo.getDatabase());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
|
||||
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
|
||||
mongo.getDatabase());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.neo.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
@Configuration
|
||||
@EnableMongoRepositories(basePackages = "com.neo.model.repository.primary",
|
||||
mongoTemplateRef = PrimaryMongoConfig.MONGO_TEMPLATE)
|
||||
public class PrimaryMongoConfig {
|
||||
|
||||
protected static final String MONGO_TEMPLATE = "primaryMongoTemplate";
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.neo.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
@Configuration
|
||||
@EnableMongoRepositories(basePackages = "com.neo.model.repository.secondary",
|
||||
mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
|
||||
public class SecondaryMongoConfig {
|
||||
|
||||
protected static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.neo.config.props;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
@Data
|
||||
@ConfigurationProperties(prefix = "mongodb")
|
||||
public class MultipleMongoProperties {
|
||||
|
||||
private MongoProperties primary = new MongoProperties();
|
||||
private MongoProperties secondary = new MongoProperties();
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.neo.model.repository.primary;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.mongodb.core.mapping.Document;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Document(collection = "first_mongo")
|
||||
public class PrimaryMongoObject {
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
private String value;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PrimaryMongoObject{" + "id='" + id + '\'' + ", value='" + value + '\''
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.neo.model.repository.primary;
|
||||
|
||||
import org.springframework.data.mongodb.repository.MongoRepository;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
public interface PrimaryRepository extends MongoRepository<PrimaryMongoObject, String> {
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.neo.model.repository.secondary;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.mongodb.core.mapping.Document;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Document(collection = "second_mongo")
|
||||
public class SecondaryMongoObject {
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
private String value;
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SecondaryMongoObject{" + "id='" + id + '\'' + ", value='" + value + '\''
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.neo.model.repository.secondary;
|
||||
|
||||
import org.springframework.data.mongodb.repository.MongoRepository;
|
||||
|
||||
/**
|
||||
* @author neo
|
||||
*/
|
||||
public interface SecondaryRepository extends MongoRepository<SecondaryMongoObject, String> {
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
mongodb:
|
||||
primary:
|
||||
host: 192.168.9.60
|
||||
port: 20000
|
||||
database: test
|
||||
secondary:
|
||||
host: 192.168.9.61
|
||||
port: 20000
|
||||
database: test1
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.neo;
|
||||
|
||||
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 ApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
System.out.println("hello world");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.neo.model.repository;
|
||||
|
||||
import com.neo.model.repository.primary.PrimaryMongoObject;
|
||||
import com.neo.model.repository.primary.PrimaryRepository;
|
||||
import com.neo.model.repository.secondary.SecondaryMongoObject;
|
||||
import com.neo.model.repository.secondary.SecondaryRepository;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by neo on 2017/5/6.
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class MuliDatabaseTest {
|
||||
|
||||
@Autowired
|
||||
private PrimaryRepository primaryRepository;
|
||||
|
||||
@Autowired
|
||||
private SecondaryRepository secondaryRepository;
|
||||
|
||||
@Test
|
||||
public void TestSave() {
|
||||
|
||||
System.out.println("************************************************************");
|
||||
System.out.println("测试开始");
|
||||
System.out.println("************************************************************");
|
||||
|
||||
this.primaryRepository
|
||||
.save(new PrimaryMongoObject(null, "第一个库的对象"));
|
||||
|
||||
this.secondaryRepository
|
||||
.save(new SecondaryMongoObject(null, "第二个库的对象"));
|
||||
|
||||
List<PrimaryMongoObject> primaries = this.primaryRepository.findAll();
|
||||
for (PrimaryMongoObject primary : primaries) {
|
||||
System.out.println(primary.toString());
|
||||
}
|
||||
|
||||
List<SecondaryMongoObject> secondaries = this.secondaryRepository.findAll();
|
||||
|
||||
for (SecondaryMongoObject secondary : secondaries) {
|
||||
System.out.println(secondary.toString());
|
||||
}
|
||||
|
||||
System.out.println("************************************************************");
|
||||
System.out.println("测试完成");
|
||||
System.out.println("************************************************************");
|
||||
}
|
||||
|
||||
}
|
||||
69
1.x/spring-boot-mybatis-annotation-mulidatasource/pom.xml
Normal file
69
1.x/spring-boot-mybatis-annotation-mulidatasource/pom.xml
Normal file
@@ -0,0 +1,69 @@
|
||||
<?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>com.neo</groupId>
|
||||
<artifactId>spring-boot-mybatis-annotation-mulidatasource</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>spring-boot-mybatis-annotation-mulidatasource</name>
|
||||
<description>Demo project for Spring Boot and mybatis with annotation</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.4.2.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||
<version>1.1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.neo;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.neo.datasource;
|
||||
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
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;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
/**
|
||||
* Created by summer on 2016/11/25.
|
||||
*/
|
||||
@Configuration
|
||||
@MapperScan(basePackages = "com.neo.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate")
|
||||
public class DataSource1Config {
|
||||
|
||||
@Bean(name = "test1DataSource")
|
||||
@ConfigurationProperties(prefix = "spring.datasource.test1")
|
||||
@Primary
|
||||
public DataSource testDataSource() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Bean(name = "test1SqlSessionFactory")
|
||||
@Primary
|
||||
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
|
||||
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
|
||||
bean.setDataSource(dataSource);
|
||||
return bean.getObject();
|
||||
}
|
||||
|
||||
@Bean(name = "test1TransactionManager")
|
||||
@Primary
|
||||
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
|
||||
return new DataSourceTransactionManager(dataSource);
|
||||
}
|
||||
|
||||
@Bean(name = "test1SqlSessionTemplate")
|
||||
@Primary
|
||||
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
|
||||
return new SqlSessionTemplate(sqlSessionFactory);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.neo.datasource;
|
||||
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
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.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
/**
|
||||
* Created by summer on 2016/11/25.
|
||||
*/
|
||||
@Configuration
|
||||
@MapperScan(basePackages = "com.neo.mapper.test2", sqlSessionTemplateRef = "test2SqlSessionTemplate")
|
||||
public class DataSource2Config {
|
||||
|
||||
@Bean(name = "test2DataSource")
|
||||
@ConfigurationProperties(prefix = "spring.datasource.test2")
|
||||
public DataSource testDataSource() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Bean(name = "test2SqlSessionFactory")
|
||||
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {
|
||||
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
|
||||
bean.setDataSource(dataSource);
|
||||
return bean.getObject();
|
||||
}
|
||||
|
||||
@Bean(name = "test2TransactionManager")
|
||||
public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
|
||||
return new DataSourceTransactionManager(dataSource);
|
||||
}
|
||||
|
||||
@Bean(name = "test2SqlSessionTemplate")
|
||||
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
|
||||
return new SqlSessionTemplate(sqlSessionFactory);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.neo.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.neo.enums.UserSexEnum;
|
||||
|
||||
public class UserEntity implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Long id;
|
||||
private String userName;
|
||||
private String passWord;
|
||||
private UserSexEnum userSex;
|
||||
private String nickName;
|
||||
|
||||
public UserEntity() {
|
||||
super();
|
||||
}
|
||||
|
||||
public UserEntity(String userName, String passWord, UserSexEnum userSex) {
|
||||
super();
|
||||
this.passWord = passWord;
|
||||
this.userName = userName;
|
||||
this.userSex = userSex;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public String getPassWord() {
|
||||
return passWord;
|
||||
}
|
||||
|
||||
public void setPassWord(String passWord) {
|
||||
this.passWord = passWord;
|
||||
}
|
||||
|
||||
public UserSexEnum getUserSex() {
|
||||
return userSex;
|
||||
}
|
||||
|
||||
public void setUserSex(UserSexEnum userSex) {
|
||||
this.userSex = userSex;
|
||||
}
|
||||
|
||||
public String getNickName() {
|
||||
return nickName;
|
||||
}
|
||||
|
||||
public void setNickName(String nickName) {
|
||||
this.nickName = nickName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
// TODO Auto-generated method stub
|
||||
return "userName " + this.userName + ", pasword " + this.passWord + "sex " + userSex.name();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.neo.enums;
|
||||
|
||||
public enum UserSexEnum {
|
||||
MAN, WOMAN
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.neo.mapper.test1;
|
||||
|
||||
import com.neo.entity.UserEntity;
|
||||
import com.neo.enums.UserSexEnum;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface User1Mapper {
|
||||
|
||||
|
||||
@Select("SELECT * FROM users")
|
||||
@Results({
|
||||
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
|
||||
@Result(property = "nickName", column = "nick_name")
|
||||
})
|
||||
List<UserEntity> getAll();
|
||||
|
||||
@Select("SELECT * FROM users WHERE id = #{id}")
|
||||
@Results({
|
||||
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
|
||||
@Result(property = "nickName", column = "nick_name")
|
||||
})
|
||||
UserEntity getOne(Long id);
|
||||
|
||||
@Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
|
||||
void insert(UserEntity user);
|
||||
|
||||
@Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
|
||||
void update(UserEntity user);
|
||||
|
||||
@Delete("DELETE FROM users WHERE id =#{id}")
|
||||
void delete(Long id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.neo.mapper.test2;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.neo.entity.UserEntity;
|
||||
import com.neo.enums.UserSexEnum;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
public interface User2Mapper {
|
||||
|
||||
|
||||
@Select("SELECT * FROM users")
|
||||
@Results({
|
||||
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
|
||||
@Result(property = "nickName", column = "nick_name")
|
||||
})
|
||||
List<UserEntity> getAll();
|
||||
|
||||
@Select("SELECT * FROM users WHERE id = #{id}")
|
||||
@Results({
|
||||
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
|
||||
@Result(property = "nickName", column = "nick_name")
|
||||
})
|
||||
UserEntity getOne(Long id);
|
||||
|
||||
@Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
|
||||
void insert(UserEntity user);
|
||||
|
||||
@Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
|
||||
void update(UserEntity user);
|
||||
|
||||
@Delete("DELETE FROM users WHERE id =#{id}")
|
||||
void delete(Long id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.neo.web;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.neo.mapper.test1.User1Mapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.neo.entity.UserEntity;
|
||||
import com.neo.mapper.test2.User2Mapper;
|
||||
|
||||
@RestController
|
||||
public class UserController {
|
||||
|
||||
@Autowired
|
||||
private User1Mapper user1Mapper;
|
||||
|
||||
@Autowired
|
||||
private User2Mapper user2Mapper;
|
||||
|
||||
@RequestMapping("/getUsers")
|
||||
public List<UserEntity> getUsers() {
|
||||
List<UserEntity> users=user1Mapper.getAll();
|
||||
return users;
|
||||
}
|
||||
|
||||
@RequestMapping("/getUser")
|
||||
public UserEntity getUser(Long id) {
|
||||
UserEntity user=user2Mapper.getOne(id);
|
||||
return user;
|
||||
}
|
||||
|
||||
@RequestMapping("/add")
|
||||
public void save(UserEntity user) {
|
||||
user2Mapper.insert(user);
|
||||
}
|
||||
|
||||
@RequestMapping(value="update")
|
||||
public void update(UserEntity user) {
|
||||
user2Mapper.update(user);
|
||||
}
|
||||
|
||||
@RequestMapping(value="/delete/{id}")
|
||||
public void delete(@PathVariable("id") Long id) {
|
||||
user1Mapper.delete(id);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
mybatis.type-aliases-package=com.neo.entity
|
||||
|
||||
spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver
|
||||
spring.datasource.test1.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
|
||||
spring.datasource.test1.username = root
|
||||
spring.datasource.test1.password = root
|
||||
|
||||
|
||||
spring.datasource.test2.driverClassName = com.mysql.jdbc.Driver
|
||||
spring.datasource.test2.url = jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8
|
||||
spring.datasource.test2.username = root
|
||||
spring.datasource.test2.password = root
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.neo;
|
||||
|
||||
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 ApplicationTests {
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
System.out.println("hello world");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.neo.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.neo.mapper.test1.User1Mapper;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import com.neo.entity.UserEntity;
|
||||
import com.neo.enums.UserSexEnum;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class User1MapperTest {
|
||||
|
||||
@Autowired
|
||||
private User1Mapper userMapper;
|
||||
|
||||
@Test
|
||||
public void testInsert() throws Exception {
|
||||
userMapper.insert(new UserEntity("aa", "a123456", UserSexEnum.MAN));
|
||||
userMapper.insert(new UserEntity("bb", "b123456", UserSexEnum.WOMAN));
|
||||
userMapper.insert(new UserEntity("cc", "b123456", UserSexEnum.WOMAN));
|
||||
|
||||
Assert.assertEquals(3, userMapper.getAll().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQuery() throws Exception {
|
||||
List<UserEntity> users = userMapper.getAll();
|
||||
if(users==null || users.size()==0){
|
||||
System.out.println("is null");
|
||||
}else{
|
||||
System.out.println(users.size());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUpdate() throws Exception {
|
||||
UserEntity user = userMapper.getOne(6l);
|
||||
System.out.println(user.toString());
|
||||
user.setNickName("neo");
|
||||
userMapper.update(user);
|
||||
Assert.assertTrue(("neo".equals(userMapper.getOne(6l).getNickName())));
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user