English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot 자동 구성

SpringBoot 자동 구성은 우리가 추가한 Jar 의존성에 따라 SpringBoot 애플리케이션을 자동으로 구성합니다.

예를 들어, H2데이터베이스 Jar가 클래스 경로에 존재하면, 우리가 수동으로 데이터베이스와 관련된 bean을 구성하지 않았다면, Spring Boot의 자동 구성 기능이 프로젝트에서 자동으로 그것을 구성합니다.

애노테이션을 사용하여 자동으로 활성화할 수 있습니다 @EnableAutoConfiguration 구성 기능. 그러나 이 애노테이션은 사용되지 않습니다. 왜냐하면 그것은 @SpringBootApplication 애노테이션 내부. @SpringBootApplication 애노테이션은 세 가지 애노테이션의 조합입니다: @ComponentScan, @EnableAutoConfiguration, @Configuration 그러나 우리는 @SpringBootApplication 애노테이션을 사용하여 @EnableAutoConfiguration를 사용하지 않습니다.

@SpringBootApplication = @ComponentScan + @EnableAutoConfiguration + @Configuration

추가할 때 프로젝트에서 spring을 사용-boot-starter-웹 의존성 시, Spring Boot 자동 구성이 클래스 경로에서 Spring MVC를 찾습니다. 그리고 자동으로 구성합니다. dispatcherServlet 의 기본 에러 페이지네트워크 탱크를 표시합니다.

또한, spring을 추가할 때-boot-starter-data-jpa 의존성, 우리는 Spring Boot 자동 설정이 자동으로 설정된다는 것을 볼 수 있습니다 데이터 소스엔티티 관리자를 표시합니다.

모든 자동 설정 로직은 spring-boot-autoconfigure.jar 에서 구현되어 있음,如图所示。

자동 설정이 필요합니다

Spring을 기반으로 한 애플리케이션은 많은 설정이 필요합니다. Spring MVC를 사용할 때, 우리는 설정해야 합니다: dispatcher servlet, 뷰解析기, Web jars 아래 코드는 웹 애플리케이션에서 스케줄러 서블릿의 기본 설정을 보여줍니다:

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/todo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

또한, Hibernate를 사용할 때/JPA를 사용할 때, 데이터 소스, 트랜잭션 관리자, 엔티티 관리자 팩토리 등을 설정해야 합니다.

데이터 소스 설정

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<jdbc:initialize-데이터베이스 데이터-source="dataSource">
<jdbc:script location="classpath:config/schema.sql" />
<jdbc:script location="classpath:config/data.sql" />
</jdbc:initialize-database>

엔티티 관리자 팩토리를 구성합니다.

<bean
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
id="entityManagerFactory"
<property name="persistenceUnitName" value="hsql_pu" />
<property name="dataSource" ref="dataSource" />
</bean>

트랜잭션 관리자를 구성합니다.

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

자동 구성 클래스 비활성화

어떤 특정 자동 구성 클래스를 비활성화하고 싶지 않으면, @EnableAutoConfiguration 애노테이션을 사용할 수 있습니다. exclude 속성을 사용하여 자동 구성 클래스를 비활성화할 수 있습니다. 예를 들어:

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration 
"},"health":{"path":{"href":"http:
}

클래스가 클래스 경로에 없으면, @EnableAutoConfiguration 애노테이션의 속성을 사용할 수 있습니다. excludeName 을 사용하여 클래스의 qualified 이름. 속성 spring.autoconfigure.exclude 자동 구성 클래스를 제외할 수 있습니다.

Spring Boot 자동 구성 예제

다음 예제에서, Spring Boot의 자동 구성 기능이 어떻게 작동하는지 볼 수 있습니다.

단계1: https:////start.spring.io/를 표시합니다.

번2단계: 名称。我们提供了 com.w3codebox 를 표시합니다.

단계3: 提供 工件 ID。我们提供了 spring-boot-autoconfiguration-example 를 표시합니다.

단계4: 添加依赖项: Spring Web, Spring Data JPA,하나 H2데이터베이스를 표시합니다.

단계5: 单击 Generate (생성) 버튼을 클릭하면, 그 프로젝트가 Jar 파일에서 내려받아 로컬 시스템에 저장합니다.

번6단계: Jar 파일을 가져와 STS 작업 공간에 붙여넣습니다.

단계7:프로젝트 폴더에 STS를 가져오기.

文件->导入->现有Maven项目->浏览->선택 폴더 spring-boot-autoconfiguration-example->完成

을 가져오는 데는 시간이 걸립니다.

단계8: 디렉토리에서 이름이 com.w3codebox.controller 의 패키지. 폴더 src/main/java 를 표시합니다.

단계9: 에서 이름이 ControllerDemo 의 Controller 클래스.3codebox.controller

ControllerDemo.java

package com.w3codebox.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ControllerDemo 
"},"health":{"path":{"href":"http:
    @RequestMapping("/")
    public String home()
    "},"health":{"path":{"href":"http:
        return "home.jsp";
    }
}

단계10: 在文件夹 src/main/java 에서 이름이 com.w3codebox.model 의 패키지.</p>

단계11: 의 패키지   com.w3codebox.model 에서 이름이   User 의 클래스.

User.java

package com.w3codebox.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="userdata")
public class User 
"},"health":{"path":{"href":"http:
    @Id
    private int id;
    private String username;
    public int getId() 
    "},"health":{"path":{"href":"http:
        return id;
    }
    public void setId(int id) 
    "},"health":{"path":{"href":"http:
        this.id = id;
    }
    public String getUname() 
    "},"health":{"path":{"href":"http:
        return username;
    }
    public void setUname(String username) 
    "},"health":{"path":{"href":"http:
        this.username = username;
    }
    @Override
    public String toString() 
    "},"health":{"path":{"href":"http:
        return "User [id=" + id + ", uname=" + username + "]";
    }
}
 

现在,我们需要配置H2数据库。

단계12: 열기   application.properties 文件并配置以下内容:  端口,启用H2控制台,数据源,和   URL。

application.properties

server.port=8085
spring.h2.console.enabled=true
spring.datasource.plateform=h2
spring.datasource.url=jdbc:h2:mem:w3codebox
 

단계13: 在文件夹   src/main/resources中创建一个 SQL 파일.

右键单击src/main/resources文件夹->新建->文件->提供文件名->完成

我们提供了文件名   data.sql 并将以下数据插入其中。

data.sql

insert into userdata values(101Tom');
insert into userdata values(102Andrew');
insert into userdata values(103Tony');
insert into userdata values(104Bob');
insert into userdata values(105Sam');
 

단계14: 在   src 文件夹中创建一个名称为   webapp 的文件夹。

단계15: 使用我们在   ControllerDemo 中返回的名称创建一个JSP文件。在ControllerDemo.java中,我们返回了   home.jsp 를 표시합니다.

home.jsp

<%@page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</<title>
</<head>
<body>
<form action="addUser">
ID :<br />
<input type="text" name="t1><br />
User name :<br />
<input type="text" name="t2><br />
<input type="submit" value="Add">
</form>
</body>
</html>
 

단계16: 运行   SpringBootAutoconfigurationExampleApplication.java 파일. 우리는 제어판에서 우리의 애플리케이션이 포트   8085 에서 실행 중입니다.

단계17: 打开浏览器并调用URL   http: //localhost: 8085/h2-console/입니다. 우리가   application.properties 파일에 설정된  드라이버 클래스,   JDBC URL 및 기본 사용자 이름   sa 를 표시합니다.

연결을 테스트할 수 있는 다음 방법도 있습니다  연결 테스트버튼을 클릭하면 연결이 성공하면 메시지가 표시됩니다  테스트 성공.

단계18: 单击  연결버튼을 클릭하면 우리가 User.java 파일에서 정의한 테이블   userdata 구조를 확인합니다.

단계19: 다음 쿼리를 실행하여 우리가 삽입한   data.sql 파일에 있는 데이터

SELECT * FROM USERDATA;
 

제어판을 자세히 보도록 하겠습니다. 우리는 다음을 볼 수 있습니다   TransactionManagement, DispatcherServlet, EntityManagerFactory,和   DataSource 자동으로 설정됩니다. 위 그림과 같이 보입니다.

디버깅 자동 설정

자동 설정에 대한更多信息를 찾을 수 있는 방법은 다음과 같습니다: 다음 두 가지 방법을 사용하여

디버깅 로깅을 열어주세요 Spring Boot 실행기를 사용하여

디버깅 로깅을 열어주세요

다음을 통해   application.properties 로깅 파일을 디버깅하기 위해 속성을 추가합니다. 위의 예제에서 디버깅 로깅을 구현해보겠습니다. 다음을 열어주세요   application.properties 파일에 다음 속성을 추가합니다:

logging.level.org.springframework: DEBUG
 

지금 프로그램을 다시 시작해주세요. 로그에 자동 설정 보고서가 출력되었습니다. 이 보고서는 모든 자동 설정 클래스를 포함하고 있습니다. 두 부분으로 나뉩니다:  정적 매칭和  부정 매칭위 그림과 같이 보입니다.

정적 매칭

부정 매칭

Spring Boot 실행기

프로젝트에서 Actuator를 사용하여   Actuator 자동 설정을 디버깅합니다. 또한 추가합니다   HAL 브라우저操作을 간소화합니다.

Spring Boot Actuator 예제를 만들어보겠습니다.

단계1: Spring Initializr http:을 열어주세요//start.spring.io 。

단계2: 提供  名称。我们提供了   com.w3codebox。

단계3: 提供  工件 ID。我们提供了  执行器自动配置示例。

단계4: 添加依赖项:   Spring Web 和   Spring Boot Actuator。

<dependency>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
 

단계5: 单击   Generate (生成)按钮。它将与项目相关的所有规范绑定到一个   jar 文件中,并将其下载到我们的本地系统中。

단계6: 提取下载的jar文件。

단계7: 使用以下步骤导入项目文件夹:

文件->导入->现有Maven项目->下一步->浏览- >选择项目文件夹->完成

导入项目后,我们可以在IDE的   Package Explorer 部分中看到以下目录结构。

단계8: 在包中创建Controller类   com.w3codebox。我们创建了一个名为   DemoRestController的控制器类。

在Controller中,我们定义了一个名为   hello( ),它返回一个字符串。

DemoRestController.java

package com.w3codebox;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoRestController 
"},"health":{"path":{"href":"http:
    @GetMapping("/hello")
    public String hello() 
    "},"health":{"path":{"href":"http:
        return "Hello User, have a nice day.";
    }
}
 

단계9: 运行   ActuatorAutoConfigurationExampleApplication.java 파일.

단계10: 打开浏览器并调用URL   http: //localhost: 8080/hello 。它返回我们在控制器中指定的字符串。

现在调用执行器URL   http: //localhost: 8080/actuator 。它将启动显示以下三个URL的执行器:   self ,   "},"templated":false},"health"} 和   info ,如下所示。

{"_links":{"self":{"href":"http://localhost:8080/{"actuator","templated":false}//localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/"},"templated":false},"health"}/"},"health":{"path":{"href":"http:*"},"path":{"href":"http://localhost:8080/actuator/{"info":{"href":"http:
 

단계11: 열기   pom.xml 파일을 추가하세요   HAL 브라우저의존성.

<dependency>
<groupId>org.springframework.data</<groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
 

단계12: 다시 실행하세요   ActuatorAutoConfigurationExampleApplication.java 파일.

HAL 브라우저에 접근하려면 입력하세요   http://localhost:8080 브라우저에서, 그런 다음 Enter 키를 누릅니다.

이제 HAL 브라우저를 통해 실행자에 접근할 수 있습니다.

자원 관리자의 텍스트 상자에 입력하세요  /actuator 한 후에 클릭하세요   Go > 버튼.

이는 실행자와 관련된 것을 표시합니다. 실행자에서 가장 중요한 것은   beans 를 표시합니다.

bean의 화살표를 클릭하면 모든

이 그림은 모든 자동 구성된   beans 의 자세한 정보.