中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud環境的初步搭建方法

發布時間:2022-02-24 17:43:30 來源:億速云 閱讀:139 作者:iii 欄目:開發技術

這篇文章主要介紹了SpringCloud環境的初步搭建方法的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringCloud環境的初步搭建方法文章都會有所收獲,下面我們一起來看看吧。

    微服務

    個人理解:

    所謂微服務是指每個模塊都可以獨立完成自己的核心業務,某一個模塊的崩潰不影響其他模塊的運行,
    每個微服務有自己單獨的一個數據庫
    每一個微小的服務組成了一個復雜的軟件系統

    微服務架構

    微服務指的是服務的大小,關注的是完成一個具體的服務(醫院的科室)

    微服務架構是一種架構模式 ,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相
    配合,為用戶提供最終價值。一種將一個單一應用程序開發為一組小型服務的方法,每個服務都在其運行
    的進程中。(整個醫院)

    優點:

    • 針對特定服務發布,影響小,風險小,成本低

    • 頻繁發布版本,快速交付需求

    • 低成本擴容,彈性伸縮,適應云環境

    SpringCould簡介

    Springboot關注于更快的開發單體的微服務,而SpringCloud關注于全局服務的治理

    Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用 Spring Boot 的開發風格做到一鍵啟動和部署。

    Spring 并沒有重復制造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過 Spring Boot 風格進行再封裝、屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

    環境搭建

    在idea中新建一個maven父工程在其pom配置對應依賴,以管理子類依賴的版本

     <properties>
    
            <lombock.version>1.18.18</lombock.version>
            <log4j.version>1.2.17</log4j.version>
        </properties>
        <dependencyManagement>
    
            <dependencies>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                    <version>3.0.2</version>
                </dependency>
    
                <!--spring cloud 依賴包-->
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Hoxton.SR9</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--spring boot 依賴包-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.3.5.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!--數據庫驅動-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.22</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                    <version>1.1.21</version>
                </dependency>
                <!--springboot 啟動器-->
    <!--            <dependency>-->
    <!--                <groupId>org.springframework.boot</groupId>-->
    <!--                <artifactId>spring-boot-starter</artifactId>-->
    <!--                <version>2.4.4</version>-->
    <!--            </dependency>-->
                <!--JUnit-->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.13</version>
                    <scope>test</scope>
                </dependency>
                <!--lombock-->
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>${lombock.version}</version>
                    <scope>import</scope>
                </dependency>
                <!--log4j-->
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>${log4j.version}</version>
    
                </dependency>
            </dependencies>
        </dependencyManagement>

    1. 創建數據庫

    創建名為db01的數據庫,有一張表dept

    2. 新建一個子模塊api

    其中只有一個實體類dept對應我們數據庫中的表

    public class Dept {
        private int deptnumber;
        private String dname;
        private String d_source;
       //對應屬性的get和set方法
    }

    3. 新建一個子模塊provider作為服務的提供者

    導入依賴

      <dependencies>
      <!--將api模塊導入由此可使用Dept實體類-->
            <dependency>
                <groupId>org.example</groupId>
                <artifactId>springcloud-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </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>2.1.1</version>
            </dependency>
        </dependencies>

    配置配置文件和對應的操作類和接口

    application.xml

    server:
      port: 8081
    
    mybatis:
      type-aliases-package: pojo
      mapper-locations: classpath:Mybatis/mapper/*.xml
      config-location: classpath:Mybatis/mybatis-config.xml
    
    
    spring:
      application:
        name: provider-name
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/db01?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8

    mapper-config.xml和Deptmapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="cacheEnabled" value="true"/>
        </settings>
    </configuration>
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.Dao.DeptDao">
        <insert id="add" parameterType="Dept">
            insert into dept(dname, d_source) values (#{dname},DATABASE());
        </insert>
        <select id="queryByID" resultType="Dept" parameterType="Long">
            select * from dept where deptnumber = #{id};
        </select>
        <select id="queryAll" resultType="Dept">
            select * from dept;
        </select>
    </mapper>

    對應的Dao,Controller,Service

    @Mapper
    public interface DeptDao {
        boolean add(Dept dept);
        Dept queryByID(long id);
        List<Dept> queryAll();
    }
    @Service
    public class DeptImpl implements DeptService{
        @Resource
        private DeptDao deptDao;
        public boolean add(Dept dept) {
    
            return deptDao.add(dept) ;
        }
    
        public Dept queryByID(long id) {
            System.out.println("deptimpl"+id);
    
            return deptDao.queryByID(id);
        }
    
        public List<Dept> queryAll() {
            return deptDao.queryAll();
        }
    }
    @RestController
    public class DeptController {
        @Autowired
        private DeptImpl deptimpl;
        @PostMapping("/dev/add")
        public boolean addDept(@RequestBody Dept dept){
            System.out.println(dept);
           return deptimpl.add(dept);
        }
        @GetMapping("/dev/{id}")
        public Dept DeptqueryByID(@PathVariable("id") long id) {
            System.out.println("deptcontroller"+id);
            return deptimpl.queryByID(id);
        }
        @PostMapping("/dev/list")
        public List<Dept> DeptqueryAll() {
            return deptimpl.queryAll();
        }

    啟動類

    @SpringBootApplication
    public class SApplication {
        public static void main(String[] args) {
            SpringApplication.run(SApplication.class,args);
        }
    }

    新建子模塊consumer作為消費者

    導入依賴

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        </dependencies>

    配置文件

    server:
      port: 80

    config類和controller

    /*
    RestTemplate 是從 Spring3.0 開始支持的一個 HTTP 請求工具,它提供了常見的REST請求方案的模版,例
    如 GET 請求、POST 請求、PUT 請求、DELETE 請求以及一些通用的請求執行方法 exchange 以及 execute。
    */
    @Configuration
    public class ConfigBean {
        @Bean
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    
    }
    @RestController
    public class ConsumerController {
        @Autowired
        private RestTemplate template;
        private static final String url="http://localhost:8001";
        @RequestMapping("/consumer/get/{id}")
        public Dept getByID(@PathVariable long id){
                                                        //請求的路徑,請求返回的對象
            Dept getEntity = template.getForObject(url + "/dev/" + id, Dept.class);
            return getEntity;
        }
        @RequestMapping("/consumer/add")
        public boolean add(String dname){
            Dept dept = new Dept();
            dept.setDname(dname);
            System.out.println(dept);
            //請求的路徑,傳遞的參數,返回的對象
            return template.postForObject(url+ "/dev/add",dept,Boolean.class);
        }
        @RequestMapping("/consumer/list")
        public List<Dept> list(){
            //請求的路徑,返回的對象
            return template.postForObject(url+"/dev/list",void.class,List.class);
        }
    
    }

    啟動類及運行結果

    debug-connect refuserd---debug-傳參為null

    @SpringBootApplication
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class,args);
        }
    }

    SpringCloud環境的初步搭建方法

    debug

    子項目無法使用父項目的依賴包

    1 如果父項目pom使用

    <dependencyManagement>
    <dependencies>
              ....
    
    </dependencies>
    </dependencyManagement>

    方式,則子項目pom不會自動使用父pom中的jar包, 如果需要使用,就要給出groupId和artifactId,無需給出version

    使用是為了統一管理版本信息

    在子工程中使用時,還是需要引入坐標的,但是不需要給出version

    在我們項目頂層的POM文件中,元素。

    通過它元素來管理jar包的版本,

    讓子項目中引用一個依賴而不用顯示的列出版本號。

    Maven會沿著父子層次向上找,

    直到找到一個擁有dependencyManagement元素的項目,

    然后它就會使用在這個dependencyManagement元素中指定的版本號。

    required a bean of type 'DeptDao' that could not be found.

    使用@Mapper而不是@Repository

        1、使用@mapper后,不需要在spring配置中設置掃描地址,通過mapper.xml里面的namespace屬性對應相關的mapper類,spring將動態的生成Bean后注入到ServiceImpl中。

        2、@repository則需要在Spring中配置掃描包地址,然后生成dao層的bean,之后被注入到ServiceImpl中

    Connection refused connect

    檢查url端口號,是否寫對,是否占用

    RestTemplate傳遞對象無法接收(null)

    服務器端對應的參數上添加@RequestBody

        @PostMapping("/dev/add")
        public boolean addDept(@RequestBody Dept dept){
            System.out.println(dept);
           return deptimpl.add(dept);
        }

    關于“SpringCloud環境的初步搭建方法”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringCloud環境的初步搭建方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    井陉县| 罗山县| 江阴市| 长治市| 论坛| 岳阳县| 盈江县| 柞水县| 神木县| 扬州市| 富裕县| 禹城市| 双鸭山市| 桑日县| 新巴尔虎右旗| 宝坻区| 惠安县| 琼海市| 玉屏| 杨浦区| 安福县| 措美县| 德令哈市| 敦化市| 习水县| 阳信县| 郴州市| 桐庐县| 偏关县| 太仆寺旗| 彰武县| 西吉县| 五华县| 麻城市| 鹤岗市| 琼结县| 新余市| 紫云| 那坡县| 北宁市| 开封市|