SpringBoot 자동 구성을 구현하는 방법
springboot 구현 방법
이전 helloworld 예제에서 처음에는 springboot가 자동으로 종속성을 가져오고 구성을 완료하는 용이함을 경험했습니다.
그럼 springboot는 어떻게 구현되나요?
1. 종속성 관리 기능
먼저 이전 콘텐츠 예제의 pom.xml을 살펴보세요.
<!--导入父工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
여기에 상위 프로젝트가 추가되고 spring-boot-starter-web이라는 종속성 하나만 가져옵니다. 관련 패키지가 들어왔습니다.
전체 과정에서 가이드 패키지에 대해 걱정할 필요가 없습니다.
1. 상위 프로젝트
모든 springboot 프로젝트에는 일반적으로 종속성 관리에 사용되는 상위 프로젝트가 있습니다.
상위 프로젝트는 많은 종속성을 선언할 수 있으므로 하위 프로젝트가 상위 프로젝트를 상속하는 한 나중에 종속성을 추가할 때 버전 번호를 추가할 필요가 없습니다.
위의 예를 들어보면 상위 프로젝트는 springboot 버전인 2.3.4.RELEASE를 사용하므로 아래에 추가된 종속성에 대해서는 버전 번호를 작성할 필요가 없습니다.
(1) 상위 프로젝트가 버전을 관리하는 방법
Ctrl을 누른 채 상위 프로젝트를 클릭하면 확인할 수 있습니다.
들어온 후에 그 사람도 spring-boot-dependents 상위 프로젝트를 가지고 있다는 것을 알았습니다.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> </parent>
계속해서 spring-boot-dependents를 입력하면 아래 속성 태그를 볼 수 있습니다.
개발에 사용할 수 있는 거의 모든 jar 패키지 버전이 여기에 선언되어 있습니다.
계속 내려가면 특정 종속성 관리 dependencyManagement를 볼 수 있습니다. 여기에 인용된 버전은 속성에 선언된 버전입니다.
예:
왼쪽에 logback이라는 패키지가 있어서 검색해 보니 여기에 정의된 버전이 1.2.3이었습니다.
그래서 상위 프로젝트의 주요 기능은 종속성 관리인데, 이는 개발에서 일반적으로 사용되는 종속성의 버전 번호를 거의 선언합니다.
(2) 지정된 버전 사용
자동 중재 버전을 사용하지 않으려면 지정된 버전을 사용할 수도 있습니다.
예를 들어 mysql 버전의 경우 자동 중재 결과가 8.0.21인데 5.1.43 버전만 사용하고 싶습니다.
속성 태그를 추가하고 그 안에 버전을 선언하세요.
<properties> <mysql.version>5.1.43</mysql.version> </properties>
가져온 종속성을 다시 보면 지정된 버전이 되었습니다.
2. 시나리오 스타터
첫 번째로 가져온 종속성을 살펴보겠습니다. spring-boot-starter-web:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
앞으로 spring-boot-starter라는 이름의 스타터를 더 많이 보게 될 것입니다. 공식 문서에도 자세한 지침이 나와 있습니다
스타터란 무엇인가요?
starter는 종속성 설명 집합입니다. 즉, 일반적으로 스타터만 소개하면 해당하는 전체 개발 시나리오가 소개됩니다.
예를 들어 데이터베이스 액세스를 위해 Spring 및 JPA를 사용하려면 프로젝트에 spring-boot-starter-data-jpa 종속성을 도입하세요.
또한 공식 스타터 명명 방법은 spring-boot-starter-*라는 점에 유의하세요.
그럼 비공식도 있다는 건가요? 예, 공식 스타터 시나리오가 여전히 귀하의 요구 사항을 충족할 수 없다고 생각되면 스타터를 사용자 정의할 수 있습니다.
그러나 공식적인 권장 사항은 사용자 정의 이름 지정을 위해 thirdpartyproject-spring-boot-starter를 사용하는 것입니다.
하나의 스타터만 가져와 전체 장면의 종속성을 가져올 수 있는 이유는 실제로 위의 상위 프로젝트와 Maven의 종속성 기능과 동일합니다.
spring-boot-starter-web으로 이동하여 아래로 스크롤하면 웹 시나리오 개발에 사용되는 종속성을 확인할 수 있습니다.
그러므로 앞으로 어떤 시나리오를 개발해야 할지 공식 문서를 참고하여 해당 런처를 가져오면 됩니다.
2. 자동 구성
여기서 다시 이전 helloworld 프로젝트에서 자동으로 구성된 springboot를 검토해 보겠습니다.
Tomcat 자동 구성
springMVC 자동 구성
웹 자동 구성 다음과 같은 일반적인 기능: 문자 인코딩 문제
默认的包结构:主程序所在包以及下面所有子包里的组件都会被默认扫描
各种配置拥有默认值
按需加载所有自动配置项
......
1. 自动配置组件
不管自动配置好什么,步骤都是:先引入、再配置。
比如 tomcat,那么前提是先引入了 tomcat 依赖,这就由上面第一部分内容所讲的依赖管理完成,在引入了 web starter 后,自动引入场景。
自动引入了场景,也就引入了这个场景下所用到的各种 jar 包,接下来就是要配置这些内容,比如 tomcat、springMVC 等等。
拿 springMVC 举例,在之前要使用 springMVC,肯定要配置DispatcherServlet,帮我们拦截所有请求。
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
现在看下之前的 helloworld 应用中,springboot 是在哪里帮我们做好配置的。
先看主程序类:
// 标记这是一个 springboot应用,这个类是主程序类,所有启动的入口 @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
可以创建个本地变量(alt+enter),可以看到这个是个ConfigurableApplicationContext类型。
@SpringBootApplication public class MainApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); } }
可以使用getBeanDefinitionNames()方法,查看里面包含了哪些容器,遍历打印出来。
@SpringBootApplication public class MainApplication { public static void main(String[] args) { // 返回IOC容器 final ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 查看容器里的组件 final String[] beanDefinitionNames = run.getBeanDefinitionNames(); for (String name: beanDefinitionNames) { System.out.println(name); } } }
接下来启动应用,看下控制台输出。
在控制台输出里ctrl+F搜索下DispatcherServlet:
发现 IOC 容器中已经有了对应的组件。
2. 默认的包结构
主程序所在包以及下面所有子包里的组件都会被默认扫描,所以我们不需要配置开启组件扫描,也可以正常使用。
但是要注意这里的范围:
示例中就是com.pingguo.boot包下以及所有子包都可以自动扫描。
如果你就是要放到外面,还希望被扫描到,怎么办?
那么可以使用主程序类中@SpringBootApplication注解中的一个属性scanBasePackages,扩大包的范围即可:
@SpringBootApplication(scanBasePackages = "com.pingguo") public class MainApplication { public static void main(String[] args) { ... ...
3. 各种配置拥有默认值
比如 tomcat端口,在application.properties配置文件里使用 idea 输入的时候,就可以看到带有默认值8080:
点击进去可看到后面都是绑定了对应的 java 类。
配置文件的值最终会绑定在对应的类上,这个类会在容器中创建对象。
4. 按需加载所有自动配置项
比如应用中只引入了spring-boot-starter-web,那么就只有web场景的自动配置才会开启。
springboot 中的所有自动配置,都在这里:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
点击spring-boot-starter-web可以找到spring-boot-starter,再进入其中就可以看到spring-boot-autoconfigure。
위 내용은 SpringBoot 자동 구성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Jasypt 소개 Jasypt는 개발자가 최소한의 노력으로 프로젝트에 기본 암호화 기능을 추가할 수 있게 해주며 암호화 작동 방식에 대한 깊은 이해가 필요하지 않은 단방향 및 양방향 암호화에 대한 높은 보안을 제공합니다. 표준 기반 암호화 기술. 비밀번호, 텍스트, 숫자, 바이너리 암호화... Spring 기반 애플리케이션, 개방형 API와의 통합에 적합하며 모든 JCE 공급자와 함께 사용할 수 있습니다... 다음 종속성을 추가합니다: com.github.ulisesbocchiojasypt-spring-boot-starter2. Jasypt의 이점은 코드가 유출되더라도 데이터 소스를 보장할 수 있어 시스템 보안을 보호합니다.

사용 시나리오 1. 주문이 성공적으로 이루어졌으나 30분 이내에 결제가 이루어지지 않았습니다. 결제 시간이 초과되어 주문이 자동으로 취소되었습니다. 2. 주문이 서명되었으며 서명 후 7일 동안 평가가 수행되지 않았습니다. 주문 시간이 초과되어 평가되지 않으면 시스템은 기본적으로 긍정적 평가로 설정됩니다. 3. 판매자가 5분 동안 주문을 받지 않으면 주문이 취소됩니다. 문자 메시지 알림이 전송됩니다... 지연이 길고 실시간 성능이 낮은 시나리오의 경우 작업 예약을 사용하여 정기적인 폴링 처리를 수행할 수 있습니다. 예: xxl-job 오늘은 다음을 선택하겠습니다.

1. Redis는 분산 잠금 원칙과 분산 잠금이 필요한 이유를 구현합니다. 분산 잠금에 대해 이야기하기 전에 분산 잠금이 필요한 이유를 설명해야 합니다. 분산 잠금의 반대는 독립형 잠금입니다. 다중 스레드 프로그램을 작성할 때 공유 변수를 동시에 작동하여 발생하는 데이터 문제를 방지하기 위해 일반적으로 잠금을 사용하여 공유 변수를 상호 제외합니다. 공유 변수의 사용 범위는 동일한 프로세스에 있습니다. 동시에 공유 리소스를 운영해야 하는 여러 프로세스가 있는 경우 어떻게 상호 배타적일 수 있습니까? 오늘날의 비즈니스 애플리케이션은 일반적으로 마이크로서비스 아키텍처입니다. 이는 하나의 애플리케이션이 여러 프로세스를 배포한다는 의미이기도 합니다. 여러 프로세스가 MySQL에서 동일한 레코드 행을 수정해야 하는 경우 잘못된 작업으로 인해 발생하는 더티 데이터를 방지하려면 배포가 필요합니다. 현재 소개할 스타일은 잠겨 있습니다. 포인트를 얻고 싶다

Springboot가 파일을 읽지만 jar 패키지로 패키징한 후 최신 개발에 액세스할 수 없습니다. springboot가 파일을 jar 패키지로 패키징한 후 파일을 읽을 수 없는 상황이 발생합니다. 그 이유는 패키징 후 파일의 가상 경로 때문입니다. 유효하지 않으며 읽기를 통해서만 액세스할 수 있습니다. 파일은 리소스 publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input 아래에 있습니다.

Springboot+Mybatis-plus가 다중 테이블 추가 작업을 수행하기 위해 SQL 문을 사용하지 않을 때 내가 직면한 문제는 테스트 환경에서 생각을 시뮬레이션하여 분해됩니다. 매개 변수가 있는 BrandDTO 개체를 생성하여 배경으로 매개 변수 전달을 시뮬레이션합니다. Mybatis-plus에서 다중 테이블 작업을 수행하는 것은 매우 어렵다는 것을 Mybatis-plus-join과 같은 도구를 사용하지 않으면 해당 Mapper.xml 파일을 구성하고 냄새나고 긴 ResultMap만 구성하면 됩니다. 해당 SQL 문을 작성합니다. 이 방법은 번거로워 보이지만 매우 유연하며 다음을 수행할 수 있습니다.

SpringBoot와 SpringMVC는 모두 Java 개발에서 일반적으로 사용되는 프레임워크이지만 둘 사이에는 몇 가지 분명한 차이점이 있습니다. 이 기사에서는 이 두 프레임워크의 기능과 용도를 살펴보고 차이점을 비교할 것입니다. 먼저 SpringBoot에 대해 알아봅시다. SpringBoot는 Spring 프레임워크를 기반으로 하는 애플리케이션의 생성 및 배포를 단순화하기 위해 Pivotal 팀에서 개발되었습니다. 독립 실행형 실행 파일을 구축하는 빠르고 가벼운 방법을 제공합니다.

1. RedisAPI 기본 직렬화 메커니즘인 RedisTemplate1.1을 사용자 정의합니다. API 기반 Redis 캐시 구현은 데이터 캐싱 작업에 RedisTemplate 템플릿을 사용합니다. 여기서 RedisTemplate 클래스를 열고 클래스의 소스 코드 정보를 봅니다. 키 선언, 값의 다양한 직렬화 방법, 초기 값은 비어 있음 @NullableprivateRedisSe

이 글에서는 dubbo+nacos+Spring Boot의 실제 개발에 대해 이야기하기 위해 자세한 예제를 작성하겠습니다. 이 기사에서는 이론적 지식을 너무 많이 다루지는 않지만 dubbo를 nacos와 통합하여 개발 환경을 신속하게 구축하는 방법을 설명하는 가장 간단한 예를 작성합니다.
