SpringCloudのちょっとしたまとめ

9130 ワード

新しい会社のフレームワークはspring boot,cloudのマイクロサービスフレームワークです.
実はもともと学びたいという考えもあって、ちょうど会社はしばらく勉強しました.そこでまとめてみます.
この文章は主にspringbootに関するいくつかのキーをまとめます.
環境:JDK 8 STS 4.9 MYSQL springBoot1.4.1 maven4.0
SpringBootはspringMvcに基づいて、より簡単なコード量、構成、導入をさらに実現しているような気がします.
それに比べてspringMvcを作成する必要がある場合は、Webを新規作成する必要があります.xml構成アプリケーション.properties,pomは対応するspring jarに依存してcontrollerの対応するインタフェースの方法を書きます
tomcatを導入し、tomcatに配置し、tomcatを起動します.
springBootはpomファイルに自分でカプセル化した依存を導入し、controllerで自分の方法を書くだけでmain関数が実行できます.
習慣を約束の配置として、業務の開発に専念し、配置を少なくし、学習の敷居を低くする.
欠点はスプリングに慣れていないと穴が多すぎることです.の自分でゆっくり並びましょう...
Springmvcはもう言わない.次に最も簡単なspringboot demoを始めます
新しいmavenプロジェクトを作成します.
pomに関連jarを導入

  4.0.0


  demo
  springBootDemo
  0.0.1-SNAPSHOT
  jar


  springBootDemo
  http://maven.apache.org


  
    UTF-8
  
  
  
    org.springframework.boot
    spring-boot-starter-parent
    1.4.1.RELEASE
  
  
  
  
      org.springframework.boot
      spring-boot-starter-web
    
    
    
        mysql
        mysql-connector-java
    
    
       org.springframework.boot
       spring-boot-starter-jdbc
     
      
       
          org.springframework.boot  
          spring-boot-starter-data-jpa  
      
      
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        1.1.1
    
     
    
org.springframework.boot
spring-boot-starter-actuator
  
  

最も基本的な依存はspring-boot-starter-parentを親として継承し、すべてのspringbootの関連依存をカプセル化します.
以下は対応するweb依存、必写、最も基本的な依存、demoだけを書けばここまで2つの依存で十分です
jdbc依存、およびMybatisの2つの選択は、データベースに接続する方法の1つです.
mybatis依存、ここのmybatisバージョンは1.1.1 1.0.0であり、ページング操作はサポートされていません.PageHelper関連プラグインのページングを自分で実現する必要があります.
Actuator依存、すなわち健康モニタリングは、プロジェクトの開始後/healthでプロジェクトの稼働健康状態を表示できます.
次の基本的な依存は書き終わったらコントロールを書くことができます
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> 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 getStringFromJpa() {
    return typeInfoRepository.findById(15L);
    }
    /**
     * 
     * Date:2017 9 15   2:46:04 
     * @author likaile 
     * @desc   Jpa                ,           
     */
    @RequestMapping("/jpaTestWithPage")
    List 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);
    }
}

対応する注釈はすべてコードの中にあって、ここで1つの外部変数に関連して、SpringBootの変数とデータベースの配置はすべてアプリケーションです.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など)は、兄弟ディレクトリの下にアプリケーション-dev.propertiesが存在します.具体的な呼び出しは、起動プロジェクトの導入時にこの値を指定して動的に呼び出します.
loggerはログファイルのいくつかのパラメータを設定します.ここでは、どのログを使用するかをカスタマイズしないと、自動的に持参したlogbackが使用されます.
Jdbcはdaoを必要としないで、mybatisは相応のmapperを必要として、私のここでサボって使う注釈、起動ログの中で1つの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 {
List findById(Long id,Pageable pageable);
List 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へのアクセス
ハロー、boy!これはカスタマイズされたグローバル変数です
Demoが完了しました.