SpringBoot в качестве нашей повседневной среды разработки, мы должны быть знакомы с основным ядром SpringBoot, включая принцип работы SpringBoot, базовую конфигурацию, внешнюю конфигурацию, конфигурацию журнала, конфигурацию профиля, основные аннотации и т. д., среди которых:
Как работает SpringBoot:
- Начальный класс и @SpringBootApplication
- Starter pom
Основные примечания:
- Разбор аннотаций
- настроить
Базовая конфигурация:
- конфигурация баннера
- Файлы конфигурации Spring Boot (свойства, yaml)
- конфигурация xml-файла
Внешняя конфигурация:
- Конфигурация параметров командной строки
- Общая конфигурация свойств, типобезопасная конфигурация
Конфигурация журнала:
- Поддерживает Log4J, Log4J2 и Logback (по умолчанию)
Конфигурация профиля:
- Разные среды соответствуют разным конфигурациям: application-{profile}.properties
Базовая конфигурация
конфигурация баннера
Создайте новый файл banner.txt в папке src/main/resources. Banner.txt можно передать черезПерсонажи, созданные веб-сайтомГенерируется автоматически. Код для запуска выключения выглядит следующим образом:
@SpringBootApplication
public class BaseSpringBootApplication {
public static void main(String[] args) {
//关闭banner
SpringApplication application = new SpringApplication(BaseSpringBootApplication.class);
//application.setBannerMode(Banner.Mode.OFF);
application.run();
//使用fluent API修改
/* new SpringApplicationBuilder(BaseSpringBootApplication.class)
.bannerMode(Banner.Mode.OFF)
.run();*/
}
}
Файлы конфигурации Spring Boot (свойства, yaml)
Файл конфигурации application.properties или application.yml можно использовать и поместить в любой каталог в каталоге src/main/resources. Как показано ниже:
конфигурация xml-файла
Вы можете использовать аннотацию @ImportResource для загрузки конфигурации xml, что сделает весеннюю загрузку более гибкой. код показывает, как показано ниже:
//导入Spring的配置文件,让配置文件里面的内容生效
@ImportResource(locations = {"classpath:base.xml"})
@Configuration
public class LoadXmlFileConfiguration {
//加载base.xml文件下的bean到IOC容器中
}
Внешняя конфигурация
Конфигурация параметров командной строки
Его можно настроить непосредственно через командную строку при запуске следующим образом:
java -jar xxx.jar --server.port=8888
Более подробное использование параметров можно просмотреть.
Общая конфигурация свойств, типобезопасная конфигурация
Чтобы вводить значения через @Value, вам нужно только определить свойства в свойствах или файле yaml и использовать @Value для прямого внедрения.Вы также можете связать свойства или свойства yaml с bean-компонентом и его свойствами через @ConfigurationProperties для достижения типа -безопасная конфигурация. Код выглядит следующим образом:
//通过@ConfigurationProperties加载properties文件属性
//可使用perfix前缀指定加载properties文件属性,通过location加载指定文件
@ConfigurationProperties(prefix = "project")
@Configuration
public class AutoConfigurationProperties {
@Value("${project.name}")
private String projectName;
@Value("project.author")
private String projectAuthor;
public String getServerInfo() {
System.out.println("projectName:" + projectName + "projectAuthor:" + projectAuthor);
return "projectName:" + projectName +" ----" + "projectAuthor:" + projectAuthor;
}
}
конфигурация журнала
Spring Boot по умолчанию использует Logback в качестве среды ведения журнала, а также поддерживает Java Util Logging, Log4J и Log4J2.
журнал с высокого на низкий уровень:
- Уровень OFF: самый высокий уровень, используемый для отключения всех
- Уровень FATAL: Указывает, что каждая серьезная ошибка приведет к завершению работы приложения.
- Уровень ERROR: указывает на то, что хотя событие ошибки и происходит, оно все же не влияет на дальнейшую работу системы.
- Уровень ПРЕДУПРЕЖДЕНИЯ: Указывает на возможную ошибочную ситуацию.
- Уровень INFO: запущенный процесс приложения
- Уровень DEBUG: уровень отладки приложения.
- TRACE : журнал сообщений о событиях
- ALL: это самый низкий уровень, который используется для включения всех журналов.
Конфигурация журнала следующая:
<?xml version="1****.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
<Property name="LOG_LEVEL_PATTERN">%5p</Property>
<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{%pid}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} %pid --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
</Console>
</Appenders>
<Loggers>
<Logger name="com.cn.ccww.*" level="info" />
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
Конфигурация профиля
Разным средам соответствуют разные конфигурации: application-{profile}.properties, а также установка в application.properties spring.profiles.active=prod, чтобы указать активный профиль. Как показано ниже:
Как работает SpringBoot
Начальный класс и @SpringBootApplication
Обычно определяют класс XXXApplication и используют аннотацию @SpringBootApplication в качестве класса запуска, в классе входа есть основной метод и используют SpringApplication.run (XXXApplication.class, args) для запуска проекта приложения Spring Boot.
@SpringBootApplication — это основная аннотация Spring Boot, это Составная аннотация, основная функция которой обеспечивается аннотацией @EnableAutoConfiguration и импортируется в класс EnableAutoConfigurationImportSelector с помощью аннотации @Import для достижения автоматической настройки.
Исходный код @SpringBootApplication:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM,
classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
....
}
Подробный исходный код @SpringBootApplication можно посмотреть в статье【Краткий и понятный анализ исходного кода аннотации @SpringBootApplication]
Starter pom
Spring Boot предоставляет нам начальный pom, который упрощает большинство сценариев разработки на уровне предприятия. Техническая конфигурация будет устранена, и мы сможем получить автоматически настроенные bean-компоненты, предоставляемые Spring Boot.
Общие стартеры:
имя | описывать |
---|---|
spring-boot-starter | Стартер ядра Spring Boot, включая автоматическую настройку, ведение журнала, поддержку файла конфигурации yaml |
spring-boot-starter-activemq | Использование Apache ActiveMQ для JMS |
spring-boot-starter-amqp | Использование Spring AMQP, Rabbit MQ |
spring-boot-starter-aop | Аспектно-ориентированное программирование через Spring AOP, AspectJ |
spring-boot-starter-cache | Поддержка кэширования с использованием кэширования Spring |
spring-boot-starter-data-cassandra | Используя распределенную базу данных Cassandra, Spring Data Cassandra |
spring-boot-starter-data-elasticsearch | Использование Elasticsearch, аналитического движка, Spring Data Elasticsearch |
spring-boot-starter-data-jdbc | Использование JDBC с пулом соединений Tomcat JDBC |
spring-boot-starter-data-jpa | Использование Spring Data JPA с Hibernate (Spring-data-jpa зависит от Hibernate) |
spring-boot-starter-data-mongodb | Используйте базу данных хранилища файлов MongoDB, Spring Data MongoDB |
spring-boot-starter-data-neo4j | Использование графовой базы данных Neo4j, Spring Data Neo4j |
spring-boot-starter-data-redis | Используйте базу данных хранилища ключей Redis через Spring Data Redis, клиент Jedis |
spring-boot-starter-data-rest | Предоставление репозиториев Spring Data REST полностью с использованием Spring Data REST |
spring-boot-starter-data-solr | Использование поисковой системы Apache Solr с Spring Data Solr |
spring-boot-starter-freemarker | Сделать так, чтобы веб-приложения MVC поддерживали FreeMarker, аналогично JSP. |
spring-boot-starter-groovy-templates | Включение веб-приложений MVC для поддержки шаблонов Groovy |
spring-boot-starter-integration | Используйте Spring Integration, API, созданный Spring Framework для интеграции корпоративных приложений (EAI). |
spring-boot-starter-json | Чтение и запись с использованием Json |
spring-boot-starter-mail | Отправка поддержки с помощью Java Mail, электронной почты Spring |
spring-boot-starter-oauth2-client | Подключайте клиентов, используя OAuth2 или OpenID Spring Security. |
spring-boot-starter-quartz | Использование планировщика Quartz |
spring-boot-starter-security | Использование среды безопасности Spring Security |
spring-boot-starter-test | Протестируйте приложения Spring Boot, включая JUnit, Hamcrest, Mockito. |
spring-boot-starter-thymeleaf | Включить веб-приложения MVC для поддержки Thymeleaf, аналогично JSP |
spring-boot-starter-validation | Использование Java Bean Validation через Hibernate Validator, Bean Validation — это спецификация проверки данных; Hibernate Validator — это среда проверки данных. |
spring-boot-starter-web | Создавайте веб-сайты, включая фреймворк в стиле RESTful SpringMVC и встроенный контейнер Tomcat по умолчанию. |
spring-boot-starter-webflux | Поддержка создания приложений WebFlux с использованием Reactive Web Spring Framework. |
spring-boot-starter-websocket | Создание приложений WebSocket с помощью Spring WebSocket |
Для более подробных стратегов вы можете просмотреть официальную документацию13.5 Starters
пользовательский стартер
Пользовательский стартер можно посмотреть[SpringBoot] -- пользовательский стартер (принцип и реализация кода)]
основная аннотация
Условные аннотации основных аннотаций находятся в пакете org.springframwork.boot.autoconfigure.condition, которые объединены метааннотацией @Conditional.Дополнительные сведения об аннотации см. в статье[Рекомендуемая серия коллекций: Spring boot 2.x Annotation Daquan (постоянно обновляется....)].
аннотация | Разобрать |
---|---|
@ConditionalOnBean | Когда в контейнере есть указанный компонент. |
@ConditionalOnClass | Когда в пути к классам есть указанный класс. |
@ConditionalOnExpression | На основе выражения SpEL в качестве условия суждения. |
@ConditionalOnJava | На основе версии JVM в качестве условия суждения. |
@ConditionalOnJndi | Находит указанное местоположение, если существует JNDI. |
@ConditionalOnMissingBean | Когда в контейнере не указан bean-компонент. |
@ConditionalOnMissingClass | Когда в пути к классам нет указанного класса. |
@ConditionalOnNotWebApplication | При условии, что текущий проект не является веб-проектом. |
@ConditionalOnProperty | Имеет ли указанное свойство указанное значение. |
@ConditionalOnResource | Имеет ли classpath указанное значение. |
@ConditionalOnSingleCandidate | Когда в контейнере находится только один указанный компонент или хотя их несколько, указывается предпочтительный компонент. |
@ConditionalOnWebApplication | При условии, что текущий проект является веб-проектом |
Анализ исходного кода:
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnBeanCondition.class)
public @interface ConditionalOnMissingBean {
.....
}
Среди них класс OnBeanCondition для @Conditional — это реализация @ConditionalOnMissingBean, которую можно настраивать.Подробности см. в следующем разделе.
Пользовательский класс условной реализации:
Реализуйте условный класс реализации, который определяет, соответствуют ли условия системы Windows, код выглядит следующим образом:
//判断是否windows系统
public class WindowsCondition implements Condition {
private final static String WINDOWS="Windows";
/**
* ConditionContext:判断条件能使用的上下文(环境)
* AnnotatedTypeMetadata:注释信息
*/
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//获取当前环境变量
Environment environment=conditionContext.getEnvironment();
//获取bean注册器
BeanDefinitionRegistry registry = conditionContext.getRegistry();
//能获取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory();
//获取环境变量中操作系统
String property = environment.getProperty("os.name");
//判断操作系统是否为windows
if(property.contains(WINDOWS)){
//判断是否存在baseWindowsSevice类,不存在则进行bean注册
boolean isWindowsSevice = registry.containsBeanDefinition("baseWindowsSevice");
if(!isWindowsSevice){
//指定Bean定义信息;(Bean的类型,Bean的一系列信息)
RootBeanDefinition beanDefinition = new RootBeanDefinition(BaseWindowsService.class);
//注册一个Bean,指定bean名
registry.registerBeanDefinition("baseWindowsSevice", beanDefinition);
BaseWindowsService windowsSevice = (BaseWindowsService)beanFactory.getBean("baseWindowsSevice");
windowsSevice.addServiceName("ccww---baseWindowsSevice");
}
return true;
}
return false;
}
}
Наконец, вы можете обратить внимание на публичный аккаунт, учиться вместе, делиться галантерейными товарами каждый день и получать обучающие видео!