springCloud的一點小總結
阿新 • • 發佈:2019-02-02
新公司的框架為spring boot ,cloud 的一整套微服務框架
其實原先也有想學的想法,正好公司給了一段時間去學。所以這裡總結一下。
本篇文章主要總結下關於springboot的一些關鍵點。
環境:JDK8 STS4.9 MYSQL springBoot1.4.1 maven4.0
springBoot給我的感覺是在springMvc的基礎上進一步實現更簡單的程式碼量,配置和部署。
相比而言 如果需要建立一個springMvc ,我需要新建web.xml 配置 application.properties ,pom依賴對應的spring jar 寫一個controller 的對應的介面方法
引入tomcat ,部署到tomcat,啟動tomcat 才可以
而springBoot 只需要在pom檔案裡引入他自己封裝好的依賴,直接在controller寫自己的方法,main函式 執行就可以了
把習慣作為約定的配置,更專注於業務的開發,更少的配置,更低的學習門檻。
缺點是 如果對應spring不熟的話,坑太多了。。自己慢慢排吧。。。
springmvc我就不講了。下面開始一個最簡單的springboot demo
新建maven 專案。
pom裡引入相關jar
最基本的依賴為 繼承 spring-boot-starter-parent 為父類,裡面封裝了所有的springboot 的相關依賴,
下面為對應的 web 依賴,必寫,最基本的依賴,如果只寫demo的話 到這裡 兩個依賴就夠了
jdbc 依賴 , 和Mybatis 二選一作為連線資料庫的做法之一
mybatis依賴,這裡的mybatis版本為1.1.1 1.0.0不支援自帶分頁操作,需要自己實現PageHelper相關外掛實現分頁
actuator依賴,也就是健康監控,可以在專案啟動後通過 /health 檢視專案的執行健康狀態
下面最基本的依賴寫完了 我們就可以寫controller了
對應的註釋都在程式碼裡,這裡涉及到一個外部變數,SpringBoot的變數和資料庫配置都在application.properties
這個檔案為預設載入檔案,預設載入地址為根目錄,一般在resource下,
程式碼:
分別指定了資料庫的地址
預設載入的tomcat的引數
自定義的一些全域性變數,變數直接呼叫的方式
多環境之間的配置檔案的地址 例如dev 的話 在同級目錄下會存在一個 application-dev.properties ,具體呼叫會在部署 啟動專案的時候 指定該值 進行動態呼叫
logger為設定日誌檔案的一些引數,這裡如果沒有自定義使用什麼日誌的話,會自動使用自帶的logback
Jdbc不需要dao,mybatis需要相應的mapper,我這裡偷懶用的註解,會在啟動日誌裡報一個warn,No MyBatis mapper was found in '[cn.com.gome.SimpleDemo]' package. Please check your configuration. 不影響做操作
現在貼上 mybaties dao層的程式碼
對應的實體類 也需要進行對應的註解
千萬注意 實體類裡的 tableName 中間的大小寫,會把中間的大寫字母自動小寫 前面加個_ 如果不想這樣 需要自定義繼承覆蓋它的對映類實現
啟動專案,訪問localhost:8080
出現 hello,boy! 這是自定義的那個全域性變數
Demo完成。
其實原先也有想學的想法,正好公司給了一段時間去學。所以這裡總結一下。
本篇文章主要總結下關於springboot的一些關鍵點。
環境:JDK8 STS4.9 MYSQL springBoot1.4.1 maven4.0
springBoot給我的感覺是在springMvc的基礎上進一步實現更簡單的程式碼量,配置和部署。
相比而言 如果需要建立一個springMvc ,我需要新建web.xml 配置 application.properties ,pom依賴對應的spring jar 寫一個controller 的對應的介面方法
引入tomcat ,部署到tomcat,啟動tomcat 才可以
而springBoot 只需要在pom檔案裡引入他自己封裝好的依賴,直接在controller寫自己的方法,main函式 執行就可以了
把習慣作為約定的配置,更專注於業務的開發,更少的配置,更低的學習門檻。
缺點是 如果對應spring不熟的話,坑太多了。。自己慢慢排吧。。。
springmvc我就不講了。下面開始一個最簡單的springboot demo
新建maven 專案。
pom裡引入相關jar
<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>demo</groupId> <artifactId>springBootDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springBootDemo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> </parent> <dependencies> <!-- Spring Boot Basic jar --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot jdbcTemplate jar--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- Spring Boot repository jar --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- Spring Boot actuator jar --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> </project>
最基本的依賴為 繼承 spring-boot-starter-parent 為父類,裡面封裝了所有的springboot 的相關依賴,
下面為對應的 web 依賴,必寫,最基本的依賴,如果只寫demo的話 到這裡 兩個依賴就夠了
jdbc 依賴 , 和Mybatis 二選一作為連線資料庫的做法之一
mybatis依賴,這裡的mybatis版本為1.1.1 1.0.0不支援自帶分頁操作,需要自己實現PageHelper相關外掛實現分頁
actuator依賴,也就是健康監控,可以在專案啟動後通過 /health 檢視專案的執行健康狀態
下面最基本的依賴寫完了 我們就可以寫controller了
import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.domain.PageRequest; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** * Date: 2017年9月15日 上午11:13:03 * @author likaile * @desc springBoot 自定義覆蓋springBoot的預設約定配置方式 * 主要測試 springboot 連線 Mysql的兩種方式 * 1.jdbcTemplate * 2.繼承curdRepository 進行操作 */ @SpringBootApplication //核心註解為@Configration @ComponentScan @EnableAuthConfigration(SpringBoot獨有) @RestController //@Controller + @ResponseBody 表明該類下所有方法返回值為json public class SampleConfigController { //引用外部自定義配置的變數 變數在application.properties 載入外部變數 @Value @Value("${welcome.string}") private String welcomeString; //引用自定義的JDBC 依賴 @Autowired private JdbcTemplate jdbcTemplate; //data-jpa mybatis的依賴處理操作 @Autowired private TypeInfoRepository typeInfoRepository; @RequestMapping("/") String home(@RequestParam(value="keyWord", required=false) String keyWord) { if(null != keyWord) { return keyWord; } return welcomeString; } /** * Date:2017年9月15日下午1:42:30 * @author likaile * @desc jdbc呼叫方法 */ @RequestMapping("/jdbcTest") List<Map<String, Object>> getStringFromJdbc() { String sql = "SELECT ID,TYPE,DESC1 FROM type_info"; return jdbcTemplate.queryForList(sql); } /** * * Date:2017年9月15日下午2:45:51 * @author likaile * @desc jpa呼叫方式 */ @RequestMapping("/jpaTest") List<TypeInfo> getStringFromJpa() { return typeInfoRepository.findById(15L); } /** * * Date:2017年9月15日下午2:46:04 * @author likaile * @desc 利用Jpa自帶的分頁 第一個引數為起始位置,第二個引數為獲取的資料 */ @RequestMapping("/jpaTestWithPage") List<TypeInfo> getStringFromJpaWithPage() { return typeInfoRepository.findById(15L,new PageRequest(0, 5)); } /** * * Date:2017年9月15日下午2:46:18 * @author likaile * @desc 自定義sql實現 */ @RequestMapping("/getById") TypeInfo getById() { return typeInfoRepository.getById(15L); } /** * * Date:2017年9月19日上午11:07:32 * @author likaile * @desc main方法 右鍵直接啟動springBoot */ public static void main(String[] args) throws Exception { SpringApplication.run(SampleConfigController.class, args); } }
對應的註釋都在程式碼裡,這裡涉及到一個外部變數,SpringBoot的變數和資料庫配置都在application.properties
這個檔案為預設載入檔案,預設載入地址為根目錄,一般在resource下,
程式碼:
# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) spring.datasource.url=jdbc:mysql://localhost:3306/mysql?characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.max-idle=10 spring.datasource.max-wait=10000 spring.datasource.min-idle=5 spring.datasource.initial-size=5 # server server.port=8080 server.session.timeout=10 server.tomcat.uri-encoding=UTF-8 #global variable welcome.string=hello,${welcome.name}! welcome.name=boy #env #spring.profiles.active=dev #logger logging.level.org.springframework.web=INFO logging.file=./springboot.log
分別指定了資料庫的地址
預設載入的tomcat的引數
自定義的一些全域性變數,變數直接呼叫的方式
多環境之間的配置檔案的地址 例如dev 的話 在同級目錄下會存在一個 application-dev.properties ,具體呼叫會在部署 啟動專案的時候 指定該值 進行動態呼叫
logger為設定日誌檔案的一些引數,這裡如果沒有自定義使用什麼日誌的話,會自動使用自帶的logback
Jdbc不需要dao,mybatis需要相應的mapper,我這裡偷懶用的註解,會在啟動日誌裡報一個warn,No MyBatis mapper was found in '[cn.com.gome.SimpleDemo]' package. Please check your configuration. 不影響做操作
現在貼上 mybaties dao層的程式碼
import javax.transaction.Transactional;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Select;
import java.lang.Long;
import java.util.List;
/**
*
* Date: 2017年9月15日 下午2:04:34
* @author likaile
* @desc data-jpa的CrudRepository 會自動根據型別來 進行封裝 對應的欄位的 find insert等方法
* 第一個引數為返回的物件型別 第二個引數為主鍵的型別
*/
@Transactional
@Repository
public interface TypeInfoRepository extends CrudRepository<TypeInfo, Long> {
List<TypeInfo> findById(Long id,Pageable pageable);
List<TypeInfo> findById(Long id);
@Select("select * from typeInfo where id = #{id}")
TypeInfo getById(Long id);
}
對應的實體類 也需要進行對應的註解
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "typeInfo")
public class TypeInfo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Column(name="type")
private String type;
@Column(name="desc1")
private String desc1;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc1() {
return desc1;
}
public void setDesc1(String desc1) {
this.desc1 = desc1;
}
}
千萬注意 實體類裡的 tableName 中間的大小寫,會把中間的大寫字母自動小寫 前面加個_ 如果不想這樣 需要自定義繼承覆蓋它的對映類實現
啟動專案,訪問localhost:8080
出現 hello,boy! 這是自定義的那個全域性變數
Demo完成。