SpringCloud 입문 실험 환경 구축

마이크로 서비스
개인 적 인 이해:
마이크로 서비스 란 모든 모듈 이 자신의 핵심 업 무 를 독립 적 으로 완성 할 수 있 고 특정한 모듈 의 붕 괴 는 다른 모듈 의 운행 에 영향 을 주지 않 는 다 는 것 을 말한다.
모든 마이크로 서 비 스 는 자신 만 의 데이터베이스 가 있다.
모든 작은 서 비 스 는 복잡 한 소프트웨어 시스템 을 구성 했다.
마이크로 서비스 구조
마이크로 서 비 스 는 서비스의 크기 를 말 하 는데 주목 하 는 것 은 구체 적 인 서 비 스 를 완성 하 는 것 이다(병원 의 부서).
마이크로 서비스 구 조 는 일종 의 구조 모델 로 단일 응용 프로그램 을 작은 서비스 로 나 누고 서비스 간 에 서로 조 화 롭 고 상호 적 인 것 을 제창한다.
협조 하여 사용자 에 게 최종 가 치 를 제공 하 다.하나의 단일 응용 프로그램 을 하나의 소형 서비스 로 개발 하 는 방법 으로 모든 서비스 가 실행 되 고 있다.
진행 중 입 니 다.온 병원
장점:
  • 특정 서비스 에 대한 발표,영향 이 적 고 위험 이 적 으 며 원가 가 낮 음
  • 빈번 한 버 전 발표,빠 른 납품 수요
  • 저 원가 확장,탄성 신축,클 라 우 드 환경 적응
  • SpringCould 소개
    Springboot 는 단일 서 비 스 를 더욱 빠르게 개발 하 는 데 관심 을 가지 고 있 으 며,SpringCloud 는 전체 서비스의 관리 에 관심 을 가지 고 있다.
    Spring Cloud 는 일련의 프레임 워 크 의 질서 있 는 집합 으로 Spring Boot 의 개발 편의 성 을 이용 하여 분포 식 시스템 인 프 라 시설 의 개발 을 교묘 하 게 간소화 했다.예 를 들 어 서비스 발견 등록,배치 센터,메시지 버스,부하 균형,차단기,데이터 모니터링 등 은 모두 Spring Boot 의 개발 스타일 로 원 키 작 동 과 배 치 를 할 수 있다.
    Spring 은 바퀴 를 중복 제조 하지 않 았 다.이 는 현재 각 회사 가 개발 한 비교적 성숙 하고 실제 시련 을 이 겨 낼 수 있 는 서비스 구 조 를 조합 하여 Spring Boot 스타일 을 통 해 재 포장 하고 복잡 한 배치 와 실현 원 리 를 차단 하 며 최종 적 으로 개발 자 에 게 간단 하고 이해 하기 쉬 우 며 배치 하기 쉬 우 며 유지 하기 쉬 운 분포 식 시스템 개발 도 구 를 남 겼 다.
    환경 구축
    아이디어 에 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.데이터베이스 만 들 기
    db 01 이라는 데이터 베 이 스 를 만 듭 니 다.표 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 refirrd---debug-전 참 은 null 입 니 다.
    
    @SpringBootApplication
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class,args);
        }
    }
    

    debug
    하위 항목 은 부모 항목 의 의존 패 키 지 를 사용 할 수 없습니다.
    1 부모 프로젝트 pom 사용 시
    
    <dependencyManagement>
    <dependencies>
              ....
    
    </dependencies>
    </dependencyManagement>
    
    방식,하위 항목 pom 은 부모 pom 의 jar 패 키 지 를 자동 으로 사용 하지 않 습 니 다.사용 하려 면 groupId 와 artifactId 를 주 고 version 을 주지 않 아 도 됩 니 다.
    사용 은 버 전 정 보 를 통일 적 으로 관리 하기 위해 서 입 니 다.
    하위 프로젝트 에서 사용 할 때 좌 표를 도입 해 야 하지만 version 을 제시 할 필요 가 없습니다.
    프로젝트 맨 위 에 있 는 POM 파일 에서 요소 입 니 다.
    그 요 소 를 통 해 jar 패키지 의 버 전 을 관리 합 니 다.
    하위 항목 에 표시 되 지 않 고 의존 하 는 버 전 번 호 를 참조 하도록 합 니 다.
    Maven 은 부자 층 을 따라 위로 찾 습 니 다.
    dependency Management 요 소 를 가 진 항목 을 찾 을 때 까지
    그리고 이 dependency Management 요소 에서 지정 한 버 전 번 호 를 사용 합 니 다.
    required a bean of type 'DeptDao' that could not be found.
    @Repository 대신@Mapper 사용 하기
        1.@mapper 를 사용 한 후 spring 설정 에 스 캔 주 소 를 설정 하지 않 아 도 됩 니 다.mapper.xml 에 있 는 namespace 속성 을 통 해 관련 된 mapper 류 에 대응 하고 spring 은 동적 으로 Bean 을 생 성 한 후 ServiceImpl 에 주입 합 니 다.
        2.@reposcory 는 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 환경 구축 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

    좋은 웹페이지 즐겨찾기