目錄css
Editor:SimpleWuhtml
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。經過這種方式,Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成爲領導者。java
Spring Boot讓咱們的Spring應用變的更輕量化。好比:你能夠僅僅依靠一個Java類來運行一個Spring引用。你也能夠打包你的應用爲jar並經過使用java -jar來運行你的Spring Web應用。mysql
Spring Boot的主要優勢:c++
在下面的代碼中只要有必定基礎會發現這寫代碼實例很是簡單對於開發者來講幾乎是「零配置」。web
開發工具:jdk8,IDEA,STS,eclipse(須要安裝STS插件)這些都支持快速啓動SpringBoot工程。我這裏就不快速啓動了,使用maven工程。學習任何一項技術首先就要精通HelloWord,那咱們來跑個初體驗。spring
首先只用maven咱們建立的maven工程直接以jar包的形式建立就好了,首先咱們來引入SpringBoot的依賴sql
首先咱們須要依賴SpringBoot父工程,這是每一個項目中必需要有的。shell
<!--引入SpringBoot父依賴--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> </parent> <!--編碼與JAVA版本--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties>
咱們啓動WEB模塊固然必需要引入WEB模塊的依賴數據庫
<dependencies> <!--引入SpringBoot-WEB模塊--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
咱們須要編寫一個SpringBoot啓動類,SpringbootFirstExperienceApplication.java
@SpringBootApplication public class SpringbootFirstExperienceApplication { public static void main(String[] args) { SpringApplication.run(SpringbootFirstExperienceApplication.class, args); } }
到了這裏咱們直接把他當成SpringMVC來使用就好了,不過這裏默認是不支持JSP官方推薦使用模板引擎,後面會寫到整合JSP。這裏我就不寫Controller了。
@SpringBootApplication:以前用戶使用的是3個註解註解他們的main類。分別是@Configuration,@EnableAutoConfiguration,@ComponentScan。因爲這些註解通常都是一塊兒使用,spring boot提供了一個統一的註解@SpringBootApplication。
注意事項:咱們使用這個註解在不指定掃描路徑的狀況下,SpringBoot只能掃描到和SpringbootFirstExperienceApplication同包或子包的Bean;
在src/main/resources中咱們能夠有幾個文件夾:
templates:用來存儲模板引擎的,Thymeleaf,FreeMarker,Velocity等都是不錯的選擇。
static:存儲一些靜態資源,css,js等
public:在默認SpringBoot工程中是不生成這個文件夾的,可是在自動配置中咱們能夠有這個文件夾用來存放公共的資源(html等)
application.properties:這個文件名字是固定的,SpringBoot啓動會默認加載這些配置在這裏面能夠配置端口號,訪問路徑,數據庫鏈接信息等等。這個文件很是重要,固然官方中推出了一個yml格式這是很是強大的數據格式。
引入依賴:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <!--引入WEB模塊--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入JDBC模塊--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--引入數據庫驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
配置application.properties,雖說是「零配置」可是這些必要的確定要指定,不然它怎麼知道連那個數據庫?
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver
使用方式:
@Service public class EmployeeService { @Autowired private JdbcTemplate jdbcTemplate; public boolean saveEmp(String name,String email,String gender){ String sql = "insert into tal_employee values(null,?,?,?)"; int result = jdbcTemplate.update(sql, name,email,gender); System.out.println("result : " + result); return result > 0 ? true:false; } }
@RestController public class EmployeeController { @Autowired private EmployeeService employeeService; @RequestMapping("/save") public String insert(String name,String email,String gender){ boolean result = employeeService.saveEmp(name, email, gender); if(result){ return "success"; } return "error"; } }
這裏咱們直接返回一個文本格式。
在上面的代碼中咱們使用到這個註解修改咱們的Controller類而是不使用@Controller這個註解,其實中包含了@Controller,同時包含@ResponseBody既然修飾在類上面那麼就是表示這個類中全部的方法都是@ResponseBody因此在這裏咱們返回字符串在前臺咱們會以文本格式展現,若是是對象那麼它會自動轉換成json格式返回。
在建立整合JSP的時候指定要選WAR,必定要選WAR。
引入依賴:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <!-- SpringBoot WEB組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 整合JSP依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> </dependencies>
而後咱們只須要配置試圖解析器路徑就能夠了。
#配置試圖解析器前綴 spring.mvc.view.prefix=/WEB-INF/views/ #配置試圖解析器後綴 spring.mvc.view.suffix=.jsp
一樣的整合JPA咱們只須要啓動咱們SpringBoot已經集成好的模塊便可。
添加依賴:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--啓動JPA組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
啓動JPA組件後直接配置數據庫鏈接信息就可使用JPA功能。
Application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver
實體類:Employee.java
@Table(name="tal_employee") @Entity public class Employee implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name="last_Name") private String lastName; private String email; private String gender; //get set 省略 }
EmployeeDao接口:
public interface EmployeeDao extends JpaRepository<Employee, Integer>{ }
EmployeeController.java:
@Controller public class EmployeeController { @Autowired private EmployeeDao employeeDao; @ResponseBody @RequestMapping("/emps") public List<Employee> getEmployees(){ List<Employee> employees = employeeDao.findAll(); System.out.println(employees); return employees; } }
引入依賴:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入對JDBC的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--引入對logging的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <!-- SpringBoot MyBatis啓動器 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
配置application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ##############datasource classpath 數據鏈接池地址############## #spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #指定咱們的mapper.xml位置 mybatis.mapper-locations=classpath:com/simple/springboot/mybatis/dao/mapper/*.xml #entity.class 指定咱們實體類所在包位置 mybatis.type-aliases-package=com.simple.springboot.mybatis.entity
固然這裏還有不少屬性若是想要使用能夠參考官方文檔。到了這裏其餘就不寫了,把他看成SSM使用就ok。
注意事項:在咱們的Dao層接口中必定要在類上加上註解@Mapper不然沒法掃描到。
在咱們SpringBoot中使用AOP很是簡單。
package com.simple.springboot.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component public class SpringBootAspect { /** * 定義一個切入點 * @author:SimpleWu * @Date:2018年10月12日 */ @Pointcut(value="execution(* com.simple.springboot.util.*.*(..))") public void aop(){} /** * 定義一個前置通知 * @author:SimpleWu * @Date:2018年10月12日 */ @Before("aop()") public void aopBefore(){ System.out.println("前置通知 SpringBootAspect....aopBefore"); } /** * 定義一個後置通知 * @author:SimpleWu * @Date:2018年10月12日 */ @After("aop()") public void aopAfter(){ System.out.println("後置通知 SpringBootAspect....aopAfter"); } /** * 處理未處理的JAVA異常 * @author:SimpleWu * @Date:2018年10月12日 */ @AfterThrowing(pointcut="aop()",throwing="e") public void exception(Exception e){ System.out.println("異常通知 SpringBootAspect...exception .." + e); } /** * 環繞通知 * @author:SimpleWu * @throws Throwable * @Date:2018年10月12日 */ @Around("aop()") public void around(ProceedingJoinPoint invocation) throws Throwable{ System.out.println("SpringBootAspect..環繞通知 Before"); invocation.proceed(); System.out.println("SpringBootAspect..環繞通知 After"); } }
SpringBoot已經集成好一個調度功能。
@Component public class ScheduledTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); /** * 任務調度,每隔5秒執行一次 * @author:SimpleWu * @Date:2018年10月12日 */ @Scheduled(fixedRate = 1000) public void reportCurrentTime() { System.out.println("如今時間:" + dateFormat.format(new Date())); } }
而後啓動的時候咱們必需要在主函數類上加上註解:@EnableScheduling(翻譯過來就是開啓調度)
/** * SpringBoot使用任務調度 * @EnableScheduling標註程序開啓任務調度 * @author :SimpleWu * @Date:2018年10月12日 */ @SpringBootApplication @EnableScheduling public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
安裝RabbitMq
因爲RabbitMQ依賴Erlang, 因此須要先安裝Erlang。
sudo yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel sudo yum install epel-release sudo yum install erlang sudo yum install socat
下載RabbitMQ,而且安裝
sudo wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el7.noarch.rpm sudo yum install rabbitmq-server-3.6.15-1.el7.noarch.rpm
進入cd /etc/rabbitmq/ 建立vim rabbitmq.config
[{rabbit, [{loopback_users, []}]}].
這裏的意思是開放使用,rabbitmq默認建立的用戶guest,密碼也是guest,這個用戶默認只能是本機訪問,localhost或者127.0.0.1,從外部訪問須要添加上面的配置。若是沒有找到清除日誌
rm rabbit\@rabbit@localhost-sasl.log
最好仍是直接sudo rabbitmqctl set_user_tags root administrator ,給root用戶賦值管理員權限
RabbitMQ,基本操做
# 添加開機啓動RabbitMQ服務 systemctl enable rabbitmq-server.service # 查看服務狀態 systemctl status rabbitmq-server.service # 啓動服務 systemctl start rabbitmq-server.service # 中止服務 systemctl stop rabbitmq-server.service # 查看當前全部用戶 rabbitmqctl list_users # 查看默認guest用戶的權限 rabbitmqctl list_user_permissions guest # 因爲RabbitMQ默認的帳號用戶名和密碼都是guest。爲了安全起見, 先刪掉默認用戶 rabbitmqctl delete_user guest # 添加新用戶 rabbitmqctl add_user username password # 設置用戶tag rabbitmqctl set_user_tags username administrator # 賦予用戶默認vhost的所有操做權限 rabbitmqctl set_permissions -p / username ".*" ".*" ".*" # 查看用戶的權限 rabbitmqctl list_user_permissions username
若是隻從命令行操做RabbitMQ,多少有點不方便。幸虧RabbitMQ自帶了web管理界面,只須要啓動插件即可以使用。
rabbitmq-plugins enable rabbitmq_management
訪問: http://服務器IP:15672
整合RabbitMq
導入Maven依賴
<!--SpringBoot2.x--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!--設置JAVA版本--> <properties> <java.version>1.8</java.version> </properties> <!--引入依賴--> <dependencies> <!--啓動RabbitmQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!--啓動WEB--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--啓動TEST--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
設置application.properties配置文件
spring.application.name=springboot-rabbitmq #RabbitMq所在服務器IP spring.rabbitmq.host=192.168.197.133 #鏈接端口號 spring.rabbitmq.port=5672 #用戶名 spring.rabbitmq.username=root #用戶密碼 spring.rabbitmq.password=123456 # 開啓發送確認 spring.rabbitmq.publisher-confirms=true # 開啓發送失敗退回 spring.rabbitmq.publisher-returns=true spring.rabbitmq.virtual-host=/
建立RabbitMq隊列初始化類,初始化隊列
/** * @author SimpleWu * @Date 2019-05-17 * 該類初始化隊列 */ @Configuration public class RabbitMqInitialization { /** * 建立隊列 隊列名字爲SayQueue * @return */ @Bean public Queue SayQueue() { return new Queue("SayQueue"); } }
建立生產者
/** * @author SimpleWu * @Date 2019-05-17 * 生產者 */ @Component public class SayProducer { @Autowired private RabbitTemplate rabbitTemplate; public void send(String name){ String sendMsg = "hello: " + name + " " + new Date(); //指定隊列 this.rabbitTemplate.convertAndSend("SayQueue", sendMsg); } }
建立消費者
@RabbitListener:當監聽到隊列 SayQueue 中有消息時則會進行接收並處理
@RabbitHandler :標註在類上面表示當有收到消息的時候,就交給 @RabbitHandler 的方法處理,具體使用哪一個方法處理,根據 MessageConverter 轉換後的參數類型
/** * @author SimpleWu * @Date 2019-05-17 * 消費者 * queues 指定監聽的隊列 */ @Component @RabbitListener(queues = "SayQueue") public class SayConsumer { @RabbitHandler public void process(String hello) { System.out.println("SayConsumer : " + hello); } }
建立接口進行測試
@RestController public class SayController { @Autowired private SayProducer sayProducer; @RequestMapping("/send/{name}") public String send(@PathVariable String name){ sayProducer.send(name); return "Send Succcess SimpleWu"; } }
啓動類就用IDEA默認生成的就行了。
http://10.192.132.22:8080/send/First 發送請求
消費者接受消息:SayConsumer : hello: First Tue May 07 17:57:02 CST 2019
注:在傳輸對象時必定要序列化
導入依賴
<!--啓動郵箱發送依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
配置Properties文件
#根據類型配置 spring.mail.host=smtp.qq.com spring.mail.port=465 spring.mail.username=450255266@qq.com #對於qq郵箱而言 密碼指的就是發送方的受權碼 spring.mail.password=看不見我-0- spring.mail.protocol=smtp spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.ssl.enable=true spring.mail.default-encoding=UTF-8 #是否用啓用加密傳送的協議驗證項 #注意:在spring.mail.password處的值是須要在郵箱設置裏面生成的受權碼,這個不是真實的密碼。
spring.mail.host 須要根據不一樣的郵箱類型配置不一樣的服務器地址
發送郵箱
/** * @author SimpleWu * @data 2019=05-17 * 發送郵件 */ @Component public class EmailService { @Autowired private JavaMailSender javaMailSender; public void sendSimpleMail(){ MimeMessage message = null; try { message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom("450255266@qq.com"); helper.setTo("450255266@qq.com"); helper.setSubject("標題:發送Html內容"); StringBuffer context = new StringBuffer(); context.append("<p style='color:red'>"); context.append("Hello SpringBoot Email Start SimpleWu!!"); context.append("</p>"); helper.setText(context.toString(),true);//設置true發送html郵件 //帶附件 //FileSystemResource fileSystemResource=new FileSystemResource(new File("D:\2019-05-07.pdf")); //helper.addAttachment("郵箱附件",fileSystemResource); javaMailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); } } }
注:最好使用異步接口發送郵件,而且發送郵件的服務器爲單獨部署。