Notas de estudio de primavera --- Inicio rápido con SpringBoot
- Notas de estudio de primavera --- SpringBoot
- 1 Introducción a SpringBoot
- 2 archivos de configuración
- 3 SpringBoot integra junit
- 4 SpringBoot integra mybatis
- 5 casos
Notas de estudio de primavera: SpringBoot
Los objetivos de hoy:
- Domine los pasos del desarrollo de programas basados en el marco SpringBoot.
- Competente en el uso de la información de configuración de SpringBoot para modificar la configuración del servidor.
- Desarrollo completo de proyecto de integración SSM basado en SpringBoot
1 Introducción a SpringBoot
SpringBoot
es Pivotal
un marco completamente nuevo proporcionado por el equipo y está diseñado para ser utilizadosimplificar Spring
AplicadoConfiguración inicialasí comoproceso de desarrollo。
El uso Spring
del marco ha simplificado nuestro desarrollo. Y SpringBoot
simplifica Spring
el desarrollo, así que puedes imaginar SpringBoot
la simplicidad y el uso generalizado. Dado que SpringBoot
se utiliza para simplificar Spring
el desarrollo, repasémoslo primero, tomando SpringMVC
el desarrollo como ejemplo:
- Cree un proyecto y
pom.xml
configure las coordenadas dependientes en el archivo de configuración.
-
Escribe
web3.0
la clase de configuración.Como
web
programa,web3.0
la clase de configuración es indispensable y esta clase de configuración es bastante problemática, el código es el siguiente
-
Escribe
SpringMVC
la clase de configuración.
Hacer esto es simplemente configurar el marco del proyecto. Para que el mundo exterior pueda acceder a él, al menos debe proporcionar una Controller
clase y un método en la clase.
- escribir
Controller
clase
Del SpringMVC
desarrollo del programa anterior, podemos ver que los primeros tres pasos tienen que ver con la configuración del entorno, y estos tres pasos son básicamente fijos. SpringBoot
Esto es para simplificar estos tres pasos. A continuación, utilizamos un caso introductorio para demostrar el desarrollo SpingBoot
simplificado Spring
.
1.1 Inicio rápido de SpringBoot
1.1.1 Pasos de desarrollo
SpringBoot
Es muy sencillo de desarrollar y se divide en los siguientes pasos:
- Cree un nuevo módulo, seleccione Inicialización de Spring y configure la información básica sobre el módulo
- Seleccione el conjunto de tecnologías que utilizará el módulo actual
- Desarrollar clase de controlador
- Ejecute la clase de aplicación generada automáticamente
Después de conocer SpringBoot
los pasos de desarrollo, procedamos con las operaciones específicas.
1.1.1.1 Crear nuevo módulo
-
Haga clic
+
en SeleccionarNew Module
Crear nuevo módulo
-
Seleccionar
Spring Initializr
, utilizado para crearSpringBoot
el proyecto.Lo que elegimos antes es
Maven
que hoy elegimosSpring Initializr
construir rápidamenteSpringBoot
el proyecto. EnModule SDK
este elemento, seleccione la versión que instalamosJDK
.
-
SpringBoot
Realizar ajustes relevantes para el proyecto.Los proyectos que construimos usando este método
SpringBoot
son en realidadMaven
proyectos, y este método es solo una forma rápida de construir.
Nota: El método de empaquetado aquí debe configurarse en
Jar
-
Seleccione
Web
y luego marqueSpring Web
Dado que necesitamos desarrollar un
web
programa que utiliceSpringMVC
tecnología, marque la casilla roja como se muestra a continuación.
-
La interfaz en la imagen a continuación no requiere ninguna modificación, simplemente haga clic
Finish
para completarSpringBoot
la construcción del proyecto.
Después de los pasos anteriores se crea un módulo con la siguiente estructura, que nos ayudará a generar automáticamente una Application
clase, que será utilizada al iniciar el servidor más adelante.
Aviso:
No es necesario crear una clase de configuración en el proyecto creado.
El proyecto creado generará automáticamente algunos otros archivos, pero estos archivos actualmente no nos sirven, por lo que podemos eliminarlos.
Los directorios y archivos que se pueden eliminar son los siguientes:
.mvn
.gitignore
HELP.md
mvnw
mvnw.cmd
1.1.1.2 CrearController
com.itheima.controller
Creado bajo el paquete , BookController
el código es el siguiente:
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
1.1.1.3 Iniciar el servidor
SpringBoot
No es necesario utilizar complementos locales para ejecutar el proyecto. Solo Tomcat
se ejecutan las clases com.itheima
bajo el paquete del proyecto Application
. Podemos ver la siguiente información en la consola.
1.1.1.4 Realización de pruebas
Utilice Postman
herramientas para probar nuestros programas.
A través del caso introductorio anterior, podemos ver que usar SpringBoot
para el desarrollo hace que todo el desarrollo sea muy simple, entonces, ¿cómo se hace?
Para estudiar este problema, debemos mirar lo que está escrito sobre Application
clases y . pom.xml
Primero echemos un vistazo a la clase Applicaion
. El contenido de esta clase es el siguiente:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Las cosas en esta clase son muy simples, simplemente agregue una @SpringBootApplication
anotación a la clase y solo habrá una línea de código en el método principal. El método principal de esta clase se ejecuta cuando iniciamos el servidor.
Eche otro vistazo al pom.xml
contenido del archivo de configuración.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--指定了一个父工程,父工程中的东西在该工程中可以继承过来使用-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--JDK 的版本-->
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--这个是单元测试的依赖,我们现在没有进行单元测试,所以这个依赖现在可以没有-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--这个插件是在打包时需要的,而这里暂时还没有用到-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
La razón por la que nuestro código se puede simplificar es por el proyecto principal especificado y Spring Web
la implementación de dependencia. Hablaremos de los detalles más adelante.
1.1.2 Comparación
Después de terminar SpringBoot
el caso introductorio, comparemos Spring
el programa y SpringBoot
el programa. Como se muestra abajo
-
coordinar
Spring
Las coordenadas en el programa deben ser escritas por usted mismo, y hay muchas coordenadasSpringBoot
Las coordenadas en el programa se generan automáticamente comprobando cuando creamos el proyecto. -
clase de configuración web3.0
Spring
El programa necesita escribir esta clase de configuración por sí mismo. Todo el mundo ha escrito esta clase de configuración antes y debe parecer muy complicado.SpringBoot
No es necesario que el programa lo escribamos nosotros mismos. -
Clase de configuración
Spring/SpringMVC
La clase de configuración del programa debe ser escrita por usted mismo.SpringBoot
No es necesario escribir el programa .
Spring Initializr
Nota: La construcción rápida de proyectos basados en IdeaSpringBoot
requiere una conexión a Internet.
1.1.3 Proyecto de construcción del sitio web oficial
En el caso básico, SpringBoot
el proyecto se puede construir rápidamente porque se implementa Idea
utilizando los componentes proporcionados por el sitio web oficial para construir el proyecto rápidamente . SpringBoot
Entonces, ¿cómo crear proyectos en el sitio web oficial? Construya siguiendo los pasos
1.1.3.1 Ingrese al sitio web oficial de SpringBoot
La dirección del sitio web oficial es la siguiente:
https://spring.io/projects/spring-boot
Después de ingresar SpringBoot
al sitio web oficial, arrástrelo hacia la parte inferior y verá el siguiente contenido
Luego haga clic en Spring Initializr
el hipervínculo y saltará a la siguiente página.
¿Te resulta familiar el contenido de esta página? Es básicamente la misma que la interfaz que utilizamos para utilizar el proyecto Idea
Quick Build SpringBoot
. Ingrese la información correspondiente en la página de arriba
1.1.3.2 Seleccionar dependencias
Para seleccionar, Spring Web
puede hacer clic en el botón en la esquina superior derecha de la imagen de arriba ADD DEPENDENCIES... CTRL + B
y aparecerá la siguiente interfaz.
1.1.3.3 Generar proyecto
Una vez completados los pasos anteriores, SpringBoot
se puede generar el proyecto. Haga clic en el botón en la parte inferior de la página GENERATE CTRL + 回车
para generar el proyecto y descargarlo localmente, como se muestra en la siguiente figura.
Abra el paquete comprimido descargado y podrá ver que la estructura del proyecto Idea
es exactamente la misma que la generada usando, como se muestra a continuación
Al abrir pom.xml
el archivo, también contiene Spring Web
las dependencias del proyecto principal y.
A través de la operación del sitio web oficial anterior, sabemos que el proyecto Idea
de compilación rápida SpringBoot
en el sitio web oficial es en realidad el componente de compilación rápida del sitio web oficial. En el futuro, incluso si no existe, Idea
aún puede usar el sitio web oficial para construir. SpringBoot
el proyecto.
1.1.4 Inicio rápido del proyecto SpringBoot
1.1.4.1 Importación de problemas
En el futuro, colaboraremos con los desarrolladores de front-end en el desarrollo. Si los desarrolladores de front-end necesitan probar el programa de front-end, deben abrir el servidor en el back-end, lo cual está sujeto a los desarrolladores de back-end. Para deshacerse de esta restricción, los desarrolladores de front-end intentan instalar Tomcat
e Idea
iniciar el programa de back-end en sus propias computadoras, lo que obviamente no es realista.
Nuestro backend puede SpringBoot
empaquetar el proyecto en jar
un paquete. El funcionamiento de este jar
paquete no depende Tomcat
y Idea
estas herramientas también pueden ejecutarse normalmente. Solo que este paquete necesita conectarse a la misma base de datos jar
que nuestro propio programa durante el proceso de ejecución . Mysql
Esto puede resolver este problema, como se muestra a continuación.
Entonces ahora la pregunta es ¿cómo empaquetarlo?
1.1.4.2 Embalaje
Dado que hemos configurado los siguientes complementos SpringBoot
al construir el proyectopom.xml
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
Entonces solo necesitamos usar Maven
el package
paquete de comandos para target
generar el Jar
paquete correspondiente en el directorio.
jar
Nota: Este complemento debe configurarse; de lo contrario , habrá problemas con el paquete empaquetado .
1.1.4.3 Inicio
Ingrese jar
la ubicación del paquete e 命令提示符
ingrese el siguiente comando en
jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar
Ejecute el comando anterior para ver SpringBoot
la información del registro en ejecución.
1.2 Descripción general de SpringBoot
SpringBoot
es un marco completamente nuevo proporcionado por el equipo de Pivotal y está diseñado parasimplificarAplicación de primaveraConfiguración inicialasí comoproceso de desarrollo。
Todos ya han experimentado SpringBoot
el programa, miremos hacia atrás y veamos SpringBoot
cuál es su función principal, que es simplificar Spring
el proceso de construcción y el proceso de desarrollo.
Spring
Existen los siguientes problemas en la construcción y desarrollo del entorno original :
- La configuración es engorrosa
- La configuración de dependencia es engorrosa
SpringBoot
Las ventajas del programa pasan a estar dirigidas a Spring
las desventajas de
- Configuración automática. Esto se utiliza para resolver
Spring
el problema de la complicada configuración del programa. - Comienza dependiente. Esto se utiliza para resolver
Spring
el problema de las engorrosas configuraciones de dependencia del programa. - Accesibilidad (servidor integrado,…).
SpringBoot
No utilizamos complementos ni locales al iniciar el programa, sino que utilizamostomcat
el servidor integrado.tomcat
SpringBoot
A continuación, hablemos de SpringBoot
las dependencias iniciales de
1.2.1 Dependencias iniciales
Muchas dependencias que contienen se generan automáticamente en el archivo de configuración del proyecto que Spring Initializr
creamos usando el método , como se muestra a continuaciónMaven
pom.xml
starter
Estas dependencias sonDependencias de inicio, exploremos cómo lo logra.
1.2.1.1 Explorar el proyecto principal
En el archivo anterior, podemos ver que se especifica un proyecto principal. Ingresamos al proyecto principal y encontramos que se especifica otro proyecto principal en el proyecto principal, como se muestra en la siguiente figura.
Luego ingrese al proyecto principal. En este proyecto, podemos ver la estructura del contenido de configuración como se muestra a continuación.
Las etiquetas en la figura anterior properties
definen las versiones de las que depende cada software técnico, lo que nos evita considerar problemas de compatibilidad de versiones cuando utilizamos diferentes tecnologías de software. En properties
, encontramos las versiones de servlet
y mysql
como se muestra a continuación.
dependencyManagement
La etiqueta es para bloquear la versión de la dependencia, pero la dependencia correspondiente no se importa; si nuestro proyecto necesita esa dependencia, solo necesitamos introducir la dependencia groupid
y artifactId
no es necesario definirla version
.
La versión del complemento también está build
bloqueada en la etiqueta, como se muestra a continuación.
Después de leer pom.xml
la configuración en el proyecto principal, no es difícil entender por qué las dependencias de nuestro proyecto no están configuradas version
.
1.2.1.2 Explorando dependencias
pom.xml
Las siguientes dependencias están configuradas en el proyecto que creamos.
Ingrese la dependencia y verifique pom.xml
las dependencias, encontrará que introduce las siguientes dependencias:
Introduce las dependencias de spring-web
y spring-webmvc
, razón por la cual nuestro proyecto aún puede usar springMVC
las anotaciones sin depender de estos dos paquetes.
En cuanto a las dependencias spring-boot-starter-tomcat
, básicamente podemos confirmar las dependencias internas a partir de sus nombres tomcat
, para que nuestro proyecto pueda comenzar normalmente.
Conclusión: si necesita utilizar tecnología en el futuro, solo necesita introducir las dependencias iniciales correspondientes a la tecnología.
1.2.1.3 Resumen
inicio
SpringBoot
Nombres de proyectos comunes en, que definen todas las coordenadas del proyecto utilizadas por el proyecto actual para lograr el propósito de reducir la configuración de dependencia.
padre
-
Todos
SpringBoot
los proyectos que se heredarán definen varios números de versión de coordenadas (gestión de dependencias, no dependencias) para lograr el propósito de reducir los conflictos de dependencia. -
spring-boot-starter-parent
spring-boot-starter-parent
Hay un total de 57 versiones de coordenadas diferentes entre (2.5.0) y (2.4.6).
desarrollo real
-
Cuando use coordenadas arbitrarias, solo escriba G y A en GAV, SpringBoot proporciona V
G: ID de grupo
A: ID de artefacto
V: versión
-
Si se produce un error de coordenadas, especifique la versión nuevamente (tenga cuidado con los conflictos de versiones)
1.2.2 Inicio del programa
Cada programa creado SpringBoot
contiene una clase similar a la siguiente, a la que llamamos clase bootstrap.
@SpringBootApplication
public class Springboot01QuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01QuickstartApplication.class, args);
}
}
Aviso:
-
SpringBoot
Al crear un proyecto, utilice el método de empaquetado en frasco. -
SpringBoot
La clase de arranque es el punto de entrada del proyecto ymain
el proyecto se puede iniciar ejecutando el métodoDebido a que
pom.xml
configuramosspring-boot-starter-web
la dependencia en y la dependencia conoce sus dependencias a través del aprendizaje previotomcat
, elmain
método de ejecución se puede usar paratomcat
iniciar nuestro proyecto.
1.2.3 Cambiar de servidor web
Ahora que estamos usando el servidor para iniciar el proyecto tomcat
, ¿podemos usar el servidor tomcat
en lugar jetty
del servidor? jetty
En nuestra maven
versión avanzada, hablaremos sobre maven
el servidor utilizado por el servidor privado. Para cambiar de servidor, debe excluir el servidor web
predeterminado . ¿Cómo excluirlo? tomcat
Usar exclusion
etiqueta
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
¿Ahora podemos ejecutar la clase bootstrap? Intente ejecutarlo. La información del registro impreso es la siguiente:
El programa se detuvo directamente, ¿por qué? Esto se debe a que si excluye tomcat
el servidor, no habrá ningún servidor en el programa. Por lo tanto, no solo se debe tomcat
excluir el servidor en este momento, sino que jetty
también se debe introducir el servidor. porque la dependencia inicial pom.xml
dejetty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
A continuación, ejecute la clase de arranque nuevamente y podrá ver en la información de registro que se utiliza jetty
el servidor .
resumen:
Al cambiar de servidor, no es difícil encontrar que cuando usamos SpringBoot
tecnologías de cambio, solo necesitamos importar las dependencias iniciales de la tecnología.
2 archivos de configuración
2.1 Formato del archivo de configuración
El número de puerto predeterminado cuando iniciamos el servidor ahora es 8080
y la ruta de acceso se puede escribir como
http://localhost:8080/books/1
En el entorno en línea, todavía queremos cambiar el número de puerto para 80
que no necesitemos escribir el número de puerto al acceder, de la siguiente manera
http://localhost/books/1
¿Y SpringBoot
cómo modificar el programa? SpringBoot
Proporciona una variedad de métodos de configuración de propiedades.
-
application.properties
server.port=80
-
application.yml
server: port: 81
-
application.yaml
server: port: 82
Nota:
SpringBoot
El nombre del archivo de configuración del programa debe serapplication
, solo el nombre del sufijo es diferente.
2.1.1 Preparación del entorno
Cree un nuevo proyecto springboot_02_base_config
para demostrar diferentes archivos de configuración. El entorno del proyecto es exactamente el mismo que el caso introductorio y la estructura es la siguiente:
com.itheima.controller
Cree un controlador nombrado bajo el paquete en el proyecto BookController
. El contenido es el siguiente:
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
2.1.2 Demostración de diferentes archivos de configuración
- archivo de configuración application.properties
Ahora necesitamos configurar, el archivo coincidente debe colocarse resources
en el directorio, y hay un application.properties
archivo de configuración nombrado en este directorio, podemos modificar el número de puerto en el archivo de configuración, escribir en el archivo de configuración port
, Idea
se le solicitará lo siguiente
application.properties
El contenido del archivo de configuración es el siguiente:
server.port=80
Cuando se inicia el servicio, la información de registro se imprimirá en la consola. En la información de registro, puede ver que el número de puerto vinculado ha sido modificado.
- archivo de configuración application.yml
Elimine application.properties
el contenido del archivo de configuración. resources
Cree un archivo de configuración con el nombre siguiente application.yml
y escriba el elemento de configuración del número de puerto en el archivo en el siguiente formato:
server:
port: 81
Nota: Después
:
, se debe agregar un espacio antes de los datos.
También hay una función de aviso en yml
el archivo de configuración, también podemos escribir en el archivo port
, y luego idea
se le solicitará y escribirá en el formato anterior.
Inicie el servicio y podrá ver en la consola que el número de puerto vinculado es81
- archivo de configuración application.yaml
Elimine application.yml
el archivo de configuración y application.properties
el contenido del archivo de configuración, y luego cree un archivo de configuración con el resources
nombre . El contenido de la configuración es el mismo que el contenido del archivo de configuración con application.yaml
el sufijo , pero se utiliza un sufijo diferente.yml
application.yaml
El contenido del archivo de configuración es el siguiente:
server:
port: 83
Inicie el servicio y podrá ver el número de puerto vinculado en la consola.
Nota: Si no aparece ningún mensaje en el archivo de cooperación, puede utilizar el siguiente método para resolver el problema
-
Haga clic
File
para seleccionarProject Structure
-
Aparecerá la siguiente ventana, haga clic en el cuadro rojo marcado en la imagen para seleccionar
-
Después de la operación anterior, aparecerá la siguiente ventana
-
Haga clic en el icono en la imagen de arriba
+
para que aparezca el archivo de configuración para seleccionar el módulo.
-
Después de seguir los pasos anteriores, verá la siguiente interfaz.
properties
Hay un archivo coincidente para el tipo yymal
dos archivos de configuración para el tipo
2.1.3 Prioridad de tres archivos coincidentes
Configure diferentes números de puerto en los tres archivos de cooperación, inicie el servicio y verifique los números de puerto vinculados. De esta manera puedes ver qué archivo de configuración tiene mayor prioridad.
application.properties
El contenido del archivo es el siguiente:
server.port=80
application.yml
El contenido del archivo es el siguiente:
server:
port: 81
application.yaml
El contenido del archivo es el siguiente:
server:
port: 82
Inicie el servicio y podrá ver el número de puerto utilizado en la consola 80
. La descripción application.properties
tiene la máxima prioridad.
Comente application.properties
el contenido del archivo de configuración. Inicie el servicio nuevamente, puede ver el número de puerto utilizado en la consola 81
, lo que indica que application.yml
el archivo de configuración es la segunda prioridad.
A partir de los resultados de la verificación anterior, se puede determinar que las prioridades de los tres archivos de configuración son:
application.properties
> application.yml
>application.yaml
Aviso:
SpringBoot
El archivo de configuración principal se llamaapplication
SpringBoot
Hay demasiados atributos integrados y todos los atributos se modifican juntos. Al usarlo, modifique los atributos mediante la tecla de solicitud + palabras clave.Por ejemplo, cuando desee establecer el nivel de registro, puede escribirlo en el archivo de configuración
logging
y se le solicitará. El contenido de la configuración es el siguiente.logging: level: root: info
2.2 formato yaml
Hablamos de tres tipos diferentes de archivos de configuración anteriormente y properties
hemos estudiado los tipos de archivos coincidentes antes. A continuación, nos centraremos en yaml
el tipo de archivos de configuración.
YAML (YAML Ain't Markup Language) , un formato de serialización de datos . Los archivos de configuración en este formato se han vuelto dominantes en los últimos años, por lo que este archivo de configuración tiene algunas ventajas sobre los archivos de configuración utilizados en los primeros días. Veamos primero los archivos de configuración utilizados antes.
Al principio utilizamos xml
el siguiente formato:
<enterprise>
<name>itcast</name>
<age>16</age>
<tel>4006184000</tel>
</enterprise>
properties
El archivo de configuración de tipo es el siguiente
enterprise.name=itcast
enterprise.age=16
enterprise.tel=4006184000
yaml
El contenido del archivo de configuración de tipo es el siguiente
enterprise:
name: itcast
age: 16
tel: 4006184000
ventaja:
-
fácil de leer
yaml
Los archivos de configuración de tiposxml
son más fáciles de leer y tienen una estructura más clara que los archivos de configuración de tipos. -
Fácil de interactuar con lenguajes de scripting
-
Tomar los datos como núcleo, centrarse en los datos e ignorar el formato.
yaml
Más centrado en datos yxml
formato
Extensión de archivo YAML:
.yml
(convencional).yaml
Los dos nombres de sufijo anteriores son aceptables y se utilizará el que se utilizará más en el futuro yml
.
2.2.1 Reglas gramaticales
-
Distingue mayúsculas y minúsculas
-
Utilice varias líneas para describir la relación jerárquica del atributo y utilice dos puntos al final de cada línea.
-
Utilice sangría para indicar relaciones jerárquicas, alinee a la izquierda del mismo nivel y solo se permiten espacios (la tecla Tab no está permitida)
No importa el número de espacios, siempre y cuando se asegure la alineación izquierda del mismo nivel.
-
Agregue un espacio delante del valor del atributo (use dos puntos + espacio como separación entre el nombre del atributo y el valor del atributo)
-
# representa comentarios
Regla básica: los datos deben estar separados por espacios y dos puntos
Para datos de matriz, se utiliza un signo menos como símbolo de inicio de datos debajo de la posición de escritura de datos. Se escribe un dato en cada línea y el signo menos está separado de los datos por un espacio, por ejemplo.
enterprise:
name: itcast
age: 16
tel: 4006184000
subject:
- Java
- 前端
- 大数据
2.3 Lectura de datos del archivo de configuración yaml
2.3.1 Preparación del entorno
Cree un nuevo proyecto llamado con la siguiente springboot_03_read_data
estructura de directoriosSpringBoot
Cree un controlador nombrado en com.itheima.controller
el paquete BookController
con el siguiente contenido:
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
com.itheima.domain
Cree una clase de entidad nombrada en el paquete, etc. Enterprise
, que se utilizará para encapsular datos, el contenido es el siguiente
public class Enterprise {
private String name;
private int age;
private String tel;
private String[] subject;
//setter and getter
//toString
}
resources
Cree un archivo de configuración denominado en application.yml
, con diferentes datos configurados en él. El contenido es el siguiente
lesson: SpringBoot
server:
port: 80
enterprise:
name: itcast
age: 16
tel: 4006184000
subject:
- Java
- 前端
- 大数据
2.3.2 Leer datos de configuración
2.3.2.1 Usar la anotación @Value
Utilice @Value("表达式")
anotaciones para leer datos del archivo coincidente. El método de referencia para leer nombres de atributos en las anotaciones es:${一级属性名.二级属性名……}
Podemos BookController
usar @Value
anotaciones para recuperar los datos del archivo coincidente, de la siguiente manera
@RestController
@RequestMapping("/books")
public class BookController {
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private Integer port;
@Value("${enterprise.subject[0]}")
private String subject_00;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(lesson);
System.out.println(port);
System.out.println(subject_00);
return "hello , spring boot!";
}
}
2.3.2.2 Objeto de entorno
Los datos leídos en el método anterior están particularmente dispersos. SpringBoot
También puede utilizar @Autowired
el Environment
objeto de inyección de anotaciones para leer los datos. Este método SpringBoot
encapsulará todos los datos del archivo de configuración en Environment
un objeto. Si necesita usar qué datos, solo necesita llamar al método Environment
del objeto getProperty(String name)
para obtenerlos . El código específico es el siguiente:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Environment env;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(env.getProperty("lesson"));
System.out.println(env.getProperty("enterprise.name"));
System.out.println(env.getProperty("enterprise.subject[0]"));
return "hello , spring boot!";
}
}
Nota: De esta manera, el marco contiene una gran cantidad de datos, que rara vez utilizamos en el desarrollo.
2.3.2.3 Objetos personalizados
SpringBoot
También proporciona una forma de encapsular los datos del archivo de configuración en nuestro objeto de clase de entidad personalizada. Las operaciones específicas son las siguientes:
-
bean
Deje la creación de clases de entidad aSpring
la administración.@Component
Agregar anotaciones a la clase. -
Utilice
@ConfigurationProperties
la anotación para cargar el archivo de configuración.prefix
También puede utilizar el atributo en esta anotación para especificar que solo se carguen los datos con el prefijo especificado. -
Inyectar
BookController
_
El código específico es el siguiente:
Enterprise
El contenido de la clase de entidad es el siguiente:
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private int age;
private String tel;
private String[] subject;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String[] getSubject() {
return subject;
}
public void setSubject(String[] subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Enterprise{" +
"name='" + name + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
", subject=" + Arrays.toString(subject) +
'}';
}
}
BookController
El contenido es el siguiente:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Enterprise enterprise;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(enterprise.getName());
System.out.println(enterprise.getAge());
System.out.println(enterprise.getSubject());
System.out.println(enterprise.getTel());
System.out.println(enterprise.getSubject()[0]);
return "hello , spring boot!";
}
}
Aviso:
Al utilizar el tercer método, aparece el siguiente mensaje de advertencia en la clase de entidad
La solución a esta advertencia es pom.xml
agregar las siguientes dependencias en
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.4 Configuración multientorno
En el futuro, en el trabajo, las configuraciones del entorno de desarrollo, el entorno de prueba y el entorno de producción definitivamente serán diferentes. Por ejemplo, durante la etapa de desarrollo, lo instalaremos en nuestra propia computadora y lo conectaremos a nuestra propia computadora. Después de desarrollar el proyecto, debemos conectarnos mysql
. mysql
Esta configuración cambia la configuración del entorno al entorno en línea.
Modificar configuraciones de un lado a otro puede ser problemático, pero SpringBoot
proporciona a los desarrolladores configuraciones rápidas para múltiples entornos. Cuando necesita cambiar de entorno, solo necesita cambiar una configuración. Los diferentes tipos de archivos de configuración tienen diferentes configuraciones para el desarrollo multientorno. A continuación, se explican los diferentes tipos de archivos de configuración.
2.4.1 archivo yaml
application.yml
Úselo para ---
separar diferentes configuraciones, el contenido es el siguiente
#开发
spring:
profiles: dev #给开发环境起的名字
server:
port: 80
---
#生产
spring:
profiles: pro #给生产环境起的名字
server:
port: 81
---
#测试
spring:
profiles: test #给测试环境起的名字
server:
port: 82
---
En la configuración anterior spring.profiles
, se utiliza para nombrar diferentes configuraciones. ¿Y cómo saber SpringBoot
qué configuración usar? Puede utilizar la siguiente configuración para habilitar ambas configuraciones.
#设置启用的环境
spring:
profiles:
active: dev #表示使用的是开发环境的配置
En resumen, application.yml
el contenido del archivo de configuración es el siguiente
#设置启用的环境
spring:
profiles:
active: dev
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#测试
spring:
profiles: test
server:
port: 82
---
Aviso:
Los elementos de configuración utilizados para nombrar las diferentes configuraciones en la configuración anterior spring.profiles
están obsoletos. El último elemento de configuración utilizado para nombrar es
#开发
spring:
config:
activate:
on-profile: dev
2.4.2 archivo de propiedades
properties
Los tipos de archivos de configuración necesitan definir diferentes archivos de configuración para configurar múltiples entornos.
-
application-dev.properties
Es el archivo de configuración del entorno de desarrollo. Configuramos el número de puerto en este archivo como80
server.port=80
-
application-test.properties
Es el archivo de configuración del entorno de prueba. Configuramos el número de puerto en este archivo como81
server.port=81
-
application-pro.properties
Es el archivo de configuración para el entorno de producción. Configuramos el número de puerto en este archivo como82
server.port=82
SpringBoot
De forma predeterminada, solo se cargará el archivo de configuración nombrado application.properties
, por lo que debe application.properties
establecer qué archivo de configuración habilitar en el archivo de configuración. La configuración es la siguiente:
spring.profiles.active=pro
2.4.3 Configuración de los parámetros de inicio de la línea de comando
SpringBoot
Los programas desarrollados utilizando se empaquetarán en el futuro jar
y java -jar xxx.jar
los servicios se iniciarán mediante . Entonces surge la pregunta: ¿cómo cambiar de entorno? Porque el archivo de configuración está incluido en el paquete jar.
Sabemos que jar
un paquete es en realidad un paquete comprimido, que puede descomprimirse, modificarse y finalmente convertirse en un paquete jar. Este método es obviamente un poco problemático, pero SpringBoot
proporciona jar
una manera de configurar un entorno específico en tiempo de ejecución, de la siguiente manera
java –jar xxx.jar –-spring.profiles.active=test
Entonces, ¿se puede modificar temporalmente el número de puerto de esta manera? También es posible, puedes hacerlo de las siguientes maneras
java –jar xxx.jar –-server.port=88
Por supuesto, también puede establecer varias configuraciones al mismo tiempo, como especificar qué configuración de entorno habilitar y especificar temporalmente el puerto, de la siguiente manera
java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test
Después de la prueba, encontrará que el número de puerto establecido en la línea de comando tiene una alta prioridad (es decir, se utiliza el número de puerto establecido en la línea de comando). La prioridad configurada en realidad se explica en el sitio web oficial. Ver SpringBoot
:
SpringBoot prioridad de configuración del sitio web oficial
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
Después de ingresar al sitio web anterior, verá la siguiente página
Si se utilizan varios métodos para hacer coincidir el mismo elemento de configuración, entrará en vigor el que tenga mayor prioridad.
2.5 Clasificación del archivo de configuración
Existe un escenario en el que necesitamos que los evaluadores realicen pruebas después de completar el desarrollo. Dado que muchas configuraciones del entorno de prueba y el entorno de desarrollo son diferentes, los evaluadores deben modificar temporalmente muchas configuraciones cuando ejecutan nuestro proyecto, de la siguiente manera
java –jar springboot.jar –-spring.profiles.active=test --server.port=85 --server.servlet.context-path=/heima --server.tomcat.connection-timeout=-1 …… …… …… …… ……
En respuesta a esta situación, SpringBoot
se definen diferentes ubicaciones de ubicación de los archivos de configuración y las prioridades de ubicación en diferentes ubicaciones son diferentes.
SpringBoot
Ubicación de ubicación del archivo de configuración de nivel intermedio 4:
- 1.: classpath: aplicación.yml
- 2: classpath: config/application.yml
- Nivel 3: archivo: aplicación.yml
- 4. Archivo: config/application.yml
ilustrar: Cuanto mayor sea el nivel, mayor será la prioridad.
2.5.1 Demostración del código
Aquí solo demostramos la prioridad de los diferentes niveles de ubicación del archivo de configuración.
2.5.1.1 Preparación del entorno
Cree un proyecto llamado con la siguiente springboot_06_config_file
estructura de directoriosSpringBoot
resources
Cree un directorio denominado en config
, cree un archivo de configuración en el directorio application.yml
y establezca el número de puerto en el archivo de configuración 81
, el contenido es el siguiente
server:
port: 81
En el archivo de configuración resources
creado application.yml
y establecido el número de puerto en 80
, el contenido es el siguiente
server:
port: 80
2.5.1.2 Verificar los niveles de prioridad 1 y 2
Ejecute la clase de inicio de inicio y podrá ver la siguiente información de registro en la consola
De este resultado se puede concluir queLos archivos de configuración bajo el classpath config
tienen prioridad sobre los archivos de configuración bajo el classpath.
2.5.1.3 Verificar los niveles de prioridad 2 y 4
Para verificar el nivel 4, siga estos pasos para completar
-
Empaquetar el proyecto en
jar
paquetes.Haga clic en el proyecto
package
parajar
empaquetar
-
jar
Encuentre la ubicación del paquete en su disco duro
-
Cree una carpeta donde
jar
se encuentre el paqueteconfig
, cree un archivo de configuración en esta carpetaapplication.yml
y establezca el número de puerto en el archivo de coordinación en82
-
Ejecute el programa usando el siguiente comando en la línea de comando
java -jar springboot_06_config_file-0.0.1-SNAPSHOT.jar
La información de registro después de la ejecución es la siguiente
De este resultado se puede concluir que
config
Archivos de configuración en el archivo: tienen prioridad sobre los archivos de configuración en el classpath.
Aviso:
Hay un error en la versión 2.5.0 de SpringBoot, cuando usamos esta versión, necesitamos crear una carpeta con cualquier nombre en el directorio
jar
donde estamos ubicados.config
3 SpringBoot integra junit
Revisar Spring
la integraciónjunit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class UserServiceTest {
@Autowired
private BookService bookService;
@Test
public void testSave(){
bookService.save();
}
}
Utilice @RunWith
anotaciones para especificar el corredor y utilice @ContextConfiguration
anotaciones para especificar la clase de configuración o el archivo de configuración. La SpringBoot
integración junit
es particularmente sencilla y se puede completar en los siguientes tres pasos:
SpringBootTest
Agregar anotaciones a la clase de prueba.- Úselo para
@Autowired
inyectar el recurso a probar. - Definir métodos de prueba para realizar pruebas.
3.1 Preparación del entorno
Cree un proyecto llamado. La estructura del directorio del proyecto es la springboot_07_test
siguienteSpringBoot
Cree una interfaz com.itheima.service
enBookService
public interface BookService {
public void save();
}
Cree una clase en com.itheima.service.impl
el paquete BookServiceImpl
y haga que implemente BookService
la interfaz, el contenido es el siguiente
@Service
public class BookServiceImpl implements BookService {
@Override
public void save() {
System.out.println("book service is running ...");
}
}
3.2 Clases de prueba de escritura
test/java
Cree un paquete en com.itheima
, cree una clase de prueba en este paquete e BookService
inyecte en la clase de prueba
@SpringBootTest
class Springboot07TestApplicationTests {
@Autowired
private BookService bookService;
@Test
public void save() {
bookService.save();
}
}
==Nota:==El paquete donde se encuentra la clase de arranque aquí debe ser el paquete donde se encuentra la clase de prueba y sus subpaquetes.
Por ejemplo:
- El paquete donde se encuentra la clase bootstrap es
com.itheima
- El paquete donde se encuentra la clase de prueba es
com.itheima
Si no se cumple este requisito, debe
@SpringBootTest
utilizarclasses
el atributo para especificar el objeto de código de bytes de la clase de inicio al utilizar anotaciones. como@SpringBootTest(classes = Springboot07TestApplication.class)
4 SpringBoot integra mybatis
4.1 Revisión de la integración de Mybatis en Spring
Spring
La integración Mybatis
requiere definir muchas clases de configuración
-
SpringConfig
Clase de configuración-
Importar
JdbcConfig
clase de configuración -
Importar
MybatisConfig
clase de configuración@Configuration @ComponentScan("com.itheima") @PropertySource("classpath:jdbc.properties") @Import({ JdbcConfig.class,MyBatisConfig.class}) public class SpringConfig { }
-
-
JdbcConfig
Clase de configuración -
Definir fuente de datos (cargar elementos de configuración de propiedades: controlador, URL, nombre de usuario, contraseña)
public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("${jdbc.password}") private String password; @Bean public DataSource getDataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; } }
-
MybatisConfig
Clase de configuración-
definición
SqlSessionFactoryBean
-
Definir la configuración de mapeo
@Bean public MapperScannerConfigurer getMapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.itheima.dao"); return msc; } @Bean public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setTypeAliasesPackage("com.itheima.domain"); ssfb.setDataSource(dataSource); return ssfb; }
-
4.2 SpringBoot integra mybatis
4.2.1 Crear módulos
-
Cree un nuevo módulo, seleccione
Spring Initializr
y configure información básica sobre el módulo.
-
Seleccione el conjunto de tecnologías que utilizará el módulo actual (MyBatis, MySQL)
4.2.2 Definir clases de entidad
com.itheima.domain
Defina la clase de entidad en el paquete , Book
el contenido es el siguiente
public class Book {
private Integer id;
private String name;
private String type;
private String description;
//setter and getter
//toString
}
4.2.3 Definir interfaz dao
com.itheima.dao
Defina la interfaz debajo del paquete , BookDao
el contenido es el siguiente
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
4.2.4 Definir clases de prueba
test/java
Defina el paquete en este com.itheima
paquete y pruebe la clase en este paquete, el contenido es el siguiente
@SpringBootTest
class Springboot08MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
Book book = bookDao.getById(1);
System.out.println(book);
}
}
4.2.5 Configuración de escritura
Nuestro código no especifica a qué base de datos conectarse, cuál es el nombre de usuario y cuál es la contraseña. Por lo tanto, esta parte debe SpringBoot
coincidir en el archivo de configuración.
application.yml
Configure el siguiente contenido en el archivo de configuración
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: root
4.2.6 Pruebas
Cuando ejecutamos el método de prueba, veremos el siguiente mensaje de error
El mensaje de error muestra que no hay ningún tipo Spring
en el contenedor . ¿Por qué pasó esto?BookDao
bean
La razón es que Mybatis
se escaneará la interfaz y el objeto de código que crea la interfaz se entregará a la Spring
administración, pero ahora no dice Mybatis
qué dao
interfaz es. Para resolver este problema, necesitamos BookDao
usarlo en la interfaz @Mapper
. BookDao
La interfaz se ha mejorado para
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
Aviso:
SpringBoot
Si la versión es inferior a 2.4.3 (no incluida) y la versión del controlador Mysql es superior a 8.0, debe configurar la zona horaria en la cadena de conexión URL
jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
o configurar la zona horaria en el lado de la base de datos MySQL para resolver este problema.
4.2.7 Uso de la fuente de datos Druida
Ahora no hemos especificado la fuente de datos. SpringBoot
Hay una fuente de datos predeterminada. También podemos especificar Druid
la fuente de datos y seguir los siguientes pasos para lograrlo.
-
Importar
Druid
dependencias<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>
-
En
application.yml
el archivo de configuración configuraciónPuede
spring.datasource.type
configurar qué fuente de datos utilizar. El contenido del archivo de configuración se puede mejorar paraspring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC username: root password: root type: com.alibaba.druid.pool.DruidDataSource
5 casos
SpringBoot
Este es el final del estudio. A continuación, utilizaremos SSM
el caso de integrar los tres marcos principales que hicimos durante el estudio SpringBoot
para implementarlo. Para completar este caso, básicamente copiamos lo que hicimos antes y lo modificamos en SpringBoot
. Se completa principalmente a partir de las siguientes partes.
-
pom.xml
Configurar dependencias iniciales y coordenadas de recursos necesarios (druida)
-
aplicación.yml
Establecer fuente de datos, puerto, etc.
-
Clase de configuración
eliminar todos
-
dao
Configurar @Mapper
-
clase de prueba
-
página
Colóquelo en el directorio estático debajo del directorio de recursos.
5.1 Crear proyecto
Cree SpringBoot
un proyecto. Al crear un proyecto, debe verificar web
, y la estructura del mysql
directorio mybatis
del proyecto es la siguiente
Dado que se utiliza en nuestro proyecto Druid
, necesitamos importar Druid
las coordenadas de
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
5.2 Copia de código
Copie el código y el código de prueba springmvc_11_page
en el proyecto java
junto con el paquete al springboot_09_ssm
proyecto y cópielo como se muestra a continuación.
El contenido que debe modificarse es el siguiente:
-
Springmvc_11_page
Debajoconfig
del paquete hay clases de configuración, ySpringBoot
el proyecto no necesita estas clases de configuración, por lo que se pueden eliminar directamente. -
dao
Al copiar la interfaz del paquete al proyecto, debe agregar anotacionesspringboot_09-ssm
a la interfaz.@Mapper
ejemplo:
-
BookServiceTest
Las pruebas deben cambiarse aSpringBoot
integradas.junit
@SpringBootTest public class BookServiceTest { @Autowired private BookService bookService; @Test public void testGetById(){ Book book = bookService.getById(2); System.out.println(book); } @Test public void testGetAll(){ List<Book> all = bookService.getAll(); System.out.println(all); } }
5.3 Archivo de configuración
application.yml
El siguiente contenido debe configurarse en el archivo de configuración.
- Número de puerto de servicio
- Información de conexión a la base de datos
- fuente de datos
server:
port: 80
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db #?servierTimezone=UTC
username: root
password: root
5.4 Recursos estáticos
SpringBoot
No hay ningún webapp
directorio en el programa, entonces SpringBoot
, ¿dónde se deben colocar los recursos estáticos en el programa?
Los recursos estáticos deben colocarse resources
debajo static
, como se muestra en la siguiente figura