스프링 부트 자동 구성
Spring Boot 자동 구성은 우리가 추가한 jar 종속성을 기반으로 Spring 애플리케이션을 자동으로 구성합니다.
예를 들어 H2 데이터베이스 Jar가 클래스 경로에 있고 데이터베이스와 관련된 빈을 수동으로 구성하지 않은 경우 Spring Boot의 자동 구성 기능이 프로젝트에서 자동으로 구성합니다.
@EnableAutoConfiguration을 사용하여 자동 구성 기능을 활성화할 수 있습니다. 그러나 이 주석은 @SpringBootApplication 주석 내부에 래핑되어 있으므로 사용되지 않습니다. 주석 @SpringBootApplication은 세 개의 주석 @ComponentScan, @EnableAutoConfiguration의 조합입니다. @Configuration이 있습니다. 그러나 @EnableAutoConfiguration 대신 @SpringBootApplication 주석을 사용합니다.
@SpringBootApplication=@ComponentScan + @EnableAutoConfiguration + @Configuration
프로젝트에 Spring-boot-starter-web 종속성을 추가하면 Spring Boot 자동 구성은 Spring MVC가 클래스 경로에 있는지 찾습니다. 디스패처 서블릿, 기본 오류 페이지 및 웹 jar를 자동으로 구성합니다.
마찬가지로 spring-boot-starter-data-jpa 종속성을 추가하면 spring boot Auto-configuration이 데이터 소스와 Entity Manager를 볼 수 있습니다.
모든 자동 구성 논리는 다음 그림과 같이 spring-boot-autoconfigure.jar에 구현됩니다.
자동 구성 필요
스프링 기반 애플리케이션에는 많은 구성이 필요합니다. Spring MVC를 사용할 때는 디스패처 서블릿, 뷰 리졸바, 웹 jar 등을 구성해야 합니다. 다음 코드는 웹 응용 프로그램에서 디스패처 서블릿의 일반적인 구성을 보여줍니다.
<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-database data-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의 제외 속성을 사용합니다. 자동 구성 클래스를 사용하지 않도록 설정합니다. 예를 들어 다음과 같습니다.
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 {}
주석 @EnableAutoConfiguration의 excludeName 특성을 사용할 수 있습니다. 클래스가 클래스 경로에 없는 경우 AutoConfiguration(자동 구성) 및 클래스의 정규화된 이름을 지정합니다. 속성 spring.autoconfigure.exclude을 사용하여 임의의 수의 자동 구성 클래스를 제외할 수 있습니다.
스프링 부트 자동 구성 예
다음 예에서는 스프링 부트의 자동 구성 기능이 작동하는 방식을 살펴보겠습니다.
1단계: 스프링 Initializr https://start.spring.io/을 엽니다.
2단계: 그룹 이름을 입력합니다.
3단계: 아티팩트 ID를 제공합니다. spring-boot-auto configuration-example을 제공했습니다.
4단계: Spring Web, Spring Data JPA, H2 Database와 같은 종속성을 추가합니다.
5단계: Generate 버튼을 클릭합니다. Generate 버튼을 클릭하면 프로젝트를 Jar 파일로 감싸고 로컬 시스템에 다운로드합니다.
6단계: Jar 파일을 추출하여 STS 작업 공간에 붙여넣습니다.
7단계: 프로젝트 폴더를 STS로 가져옵니다.
파일 -> 가져오기 -> 기존 메이븐 프로젝트 -> 찾아보기 -> spring-boot-autoconfiguration-example -> finish 폴더를 선택합니다.
8단계: src/main/java 폴더에 com.javatpoint.controller라는 이름의 패키지를 만듭니다.
9단계: com.javatpoint.controller 패키지에 ControllerDemo라는 이름으로 Controller 클래스를 생성합니다.
package com.xxx.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ControllerDemo {
@RequestMapping("/")
public String home() {
return "home.jsp";
}
}
10단계: src/main/java 폴더에 com.xxx.model이라는 이름의 다른 패키지를 만듭니다.
11단계: com.javatpoint.model 패키지에 User라는 이름의 클래스를 만듭니다.
package com.xxx.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "userdata")
public class User {
@Id
private int id;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUname() {
return username;
}
public void setUname(String username) {
this.username = username;
}
@Override
public String toString() {
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:javatpoint
13단계: src/main/resources 폴더에 SQL 파일을 만듭니다.
src/main/resources -> New -> File -> Provider the File name -> Finish 폴더를 마우스 오른쪽 버튼으로 클릭합니다.
파일 이름 data.sql을 제공했고 그 안에 다음 데이터를 삽입합니다.
insert into userdata values(101,'Tom');
insert into userdata values(102,'Andrew');
insert into userdata values(103,'Tony');
insert into userdata values(104,'Bob');
insert into userdata values(105,'Sam');
14단계: src 폴더에 webapp이라는 이름의 폴더를 만듭니다.
15단계: 컨트롤러 데모에서 반환한 이름으로 JSP 파일을 만듭니다. 컨트롤러 Demo.java에서 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단계: 스프링 부트를 실행합니다. AutoconfigurationExampleApplication.java 파일입니다. 콘솔에서 우리의 애플리케이션이 포트 8085에서 성공적으로 실행되고 있음을 알 수 있습니다.
17단계: 브라우저를 열고 URL http://localhost:8085/h2-console/을 호출합니다. 여기에는 드라이버 클래스, application.properties 파일에서 구성한 JDBC URL 및 기본 사용자 이름 sa가 표시됩니다.
연결 테스트 버튼을 클릭하여 연결을 테스트할 수도 있습니다. 연결에 성공하면 테스트 성공 메시지가 표시됩니다.
18단계: Connect(연결) 버튼을 클릭합니다. User.java 파일에 정의한 테이블 사용자 데이터의 구조를 보여줍니다.
19단계: 다음 쿼리를 실행하여 data.sql 파일에 삽입한 데이터를 확인합니다.
SELECT * FROM USERDATA;
콘솔을 자세히 살펴보겠습니다. Transaction Management, Dispatcher Servlet, EntityManagerFactory 및 DataSource가 다음 그림과 같이 자동으로 구성됩니다.
자동 구성을 디버깅
자동 구성에 대한 자세한 내용은 다음 두 가지 방법을 참조하십시오.
디버그 로깅을 설정합니다.
스프링 부트 액추에이터를 사용합니다.
디버그 로깅을 설정합니다.
application.properties 파일에 속성을 추가하여 로깅을 디버그할 수 있습니다. 위의 예에서 디버그 로깅을 구현하겠습니다. application.properties 파일을 열고 다음 속성을 추가하십시오.
logging.level.org.springframework: DEBUG
이제 응용 프로그램을 다시 시작합니다. 로그에 자동 구성 보고서가 인쇄되어 있습니다. 리포트에는 자동으로 구성된 모든 클래스가 포함됩니다. 다음 그림과 같이 양성 일치 음성의 두 부분으로 나뉩니다.
스프링 부트 액추에이터
프로젝트에서 액추에이터를 사용하여 자동 구성을 디버깅할 수도 있습니다. 우리는 또한 HAL Browser를 추가하여 작업을 쉽게 할 것입니다. 자동으로 구성된 모든 빈에 대한 세부 정보가 표시됩니다.
스프링 부트 액추에이터의 예를 만들어 보겠습니다.
1단계: Spring Initializr http://start.spring을 엽니다.아이오
2단계: 그룹 이름을 입력합니다. 우리는 com.javatpoint를 제공했습니다.
3단계: 아티팩트 ID를 제공합니다. 액추에이터-자동 구성-예시를 제공했습니다.
4단계: 종속성(스프링 웹 및 스프링 부트 액추에이터)을 추가합니다.
<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단계: 다음 단계를 사용하여 프로젝트 폴더를 가져옵니다.
파일 -> Import -> 기존 메이븐 프로젝트 -> Next -> Browse -> Project 폴더 선택 -> Finish
프로젝트를 가져오면 IDE의 패키지 탐색기 섹션에서 다음과 같은 디렉터리 구조를 볼 수 있습니다.
8단계: 패키지 com.javatpoint에 컨트롤러 클래스를 만듭니다. DemoRestController라는 이름의 컨트롤러 클래스를 만들었습니다.
컨트롤러에서 문자열을 반환하는 hello() 메서드를 정의했습니다.
package com.xxx;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoRestController {
@GetMapping("/hello")
public String hello() {
return "Hello User, have a nice day.";
}
}
9단계: 액추에이터를 실행합니다.AutoConfigurationExampleApplication.java 파일입니다.
10단계: 브라우저를 열고 URL http://localhost:8080/hello를 호출합니다. 컨트롤러에 지정한 문자열을 반환합니다.
이제 액추에이터 URL http://localhost:8080/actuator를 호출합니다. 아래와 같이 세 개의 URL(셀프, 헬스, 정보)을 표시하는 액튜에이터를 실행합니다.
{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},"health":{"href":"http://localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/health/{*path}","templated":true},"info":{"href":"http://localhost:8080/actuator/info","templated":fals
11단계: pom.xml 파일을 열고 HAL 브라우저 종속성을 추가합니다.
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
12단계: 액추에이터를 다시 실행합니다.AutoConfigurationExampleApplication.java 파일입니다.
HAL 브라우저에 액세스하려면 브라우저에서 http://localhost:8080을 입력하고 Enter 키를 누릅니다.
이제 HAL 브라우저를 통해 액추에이터에 액세스할 수 있습니다.
탐색기의 텍스트 상자에 /actuator를 입력하고 Go(이동) 버튼을 클릭합니다.
그것은 액추에이터와 관련된 모든 것을 보여줍니다. 작동기에서 가장 중요한 것은 빈입니다.
빈의 화살표를 클릭하면 스프링 부트 프로젝트에 구성된 모든 빈이 표시됩니다.
위 이미지에는 자동으로 구성되고 그렇지 않은 모든 빈의 세부 정보가 표시됩니다.
'SW > Spring Boot' 카테고리의 다른 글
Spring Boot : Tomcat으로 프로젝트 배포 방법, 예제, 개념, 개요 (0) | 2023.03.22 |
---|---|
Spring Boot : Hello World 예제, 개념, 설명, 개요 (0) | 2023.03.21 |
Spring Boot : Spring Boot Packaging 개념, 개요, 설명 (0) | 2023.03.19 |
Spring Boot : Spring Boot DevTools 개념, 예제, 설명, 방법 (0) | 2023.03.18 |
Spring Boot : Spring Boot Starter Test 개념, 예제, 설명 (0) | 2023.03.17 |