Transcripciones
1. INTRODUCCIÓN: Hola a todos. Bienvenidos
a este curso. Mi nombre es Ezequiel Eramos. Seré tu instructor
para este curso. Este curso está basado en proyectos, y vamos a estar tomando
un enfoque pragmático, explorando las cosas en detalle Seguro que encontrarás
el curso
interesante y muy atractivo
con mucho contenido. Espero verte
en el siguiente video.
2. Herramientas necesarias: A B, Z aquí. En este video en particular, estaremos discutiendo
las herramientas y la tecnología que se requieren
para este curso. Lo primero es
poder escribir botas de primavera
o primavera con apalancamientos
en Java ocho y superiores Ten en cuenta que si estás
familiarizado con el uso de Java, al
menos Java ocho, no
deberías encontrar ningún problema en
absoluto con este curso. Ese es el primer requisito. Ahora pasando
al IDE que estaremos usando, que es el entorno de
desarrollo integrado, estaremos usando Intelligda Intellig Ida es lo
que vamos a
utilizar en este curso, Estaré usando la versión
definitiva, pero no haría
nada más allá de lo que la versión comunitaria es capaz de hacer, que
es totalmente gratuita. ¿Todo bien? Por favor,
tenga esto en cuenta. También
aprovecharemos Github, que es una plataforma online gratuita
para almacenar nuestros proyectos Así que por favor tenga en cuenta
que esto también es muy importante. Entonces para probar nuestra API de usar Hussman Hosman
es lo que vamos a usar Si estás familiarizado
con el Insomnio, o estás familiarizado
con el uso de curl. Eso también es bienvenido. Solo usa lo que sea cómodo para ti. Finalmente, para construir
una sección cobertiva, que es la clase que
vendrá después de que la sección de tubería
estará usando Docker Docker Dektop es
absolutamente gratis. Donde puedes descargar
dependiendo de tu
sistema de perting que estés usando Esto es prácticamente todo lo que se
reunirá en este curso, con este set los
veré en el siguiente video.
3. Monolito vs. microservicios: Bien, muchas gracias,
chicos, por acompañarme. Mi nombre es Zikel como lo
introduje en el último video, Tod carbones me he estado
presentando como Zikel o Entonces esta parte esta sección es
un poco de Jeri, ¿verdad? Nosotros probablemente serán
unos minutos. No obstante, si
sabes que no te interesa Jery sé exactamente de
qué se trata el costo, prácticamente
podrías
pasar a la siguiente sección Solo omita este video, ¿verdad?
Rápidamente omita este video para
que realmente se aburra.
Bien, sigamos adelante Entonces esto es solo una comparación muy
pequeña entre monolito y
microservicios, Recuerda que el detalle central de
este curso es modulith. Entonces necesitamos ver
la transición. Debe haber una razón
debería ser que debería
haber un problema o
un caso de uso que el modulit
básicamente está Y por eso
necesitamos saber cuáles son los problemas comunes que
tenemos entre monolito y
microservicios y por qué
elegimos o por qué estamos migrando hacia Bien. Uh a partir de la primera visión general de la arquitectura. Vemos que los monolitos están
básicamente estrechamente acoplados, monolitos están estrechamente Mientras que los Microservicios son
pequeños servicios independientes que se comunican a través de una red Eso simplemente podría
explicarse que todo está dentro de
la misma aplicación para un monol por lo que
puede crecer muy grande, en realidad
tenemos las cosas
estrechamente acopladas entre sí Pero en el caso de los microservicios, en realidad
podríamos
descomponer las cosas Un ejemplo típico podría ser si en una organización
tenemos un servicio de correo electrónico, podríamos en lugar acoplar todo dentro de
una sola aplicación, podríamos sacar ese servicio. Todos o cualquier
otra solicitud simplemente
llamarán al
servicio de correo electrónico y enviarán su solicitud y el servicio de
correo electrónico solo debe manejar el procesamiento
de esas No obstante, para Module,
todo seguirá estando dentro de la misma aplicación
Modult Probablemente deberías tener
solo un paquete si realmente estás
hablando de Java, o simplemente tener un paquete que
maneje que solo maneja el
correo electrónico y eso es todo Solo tienes un servicio, un
solo servicio maneja al que todo el mundo básicamente llama. Hablemos del siguiente siguiente que
es la escalabilidad. Uh, este es un
problema muy central con los monolitos, ¿verdad? Porque cuando quieres escalar cuando quieres escalar,
escalar solo significa, por
ejemplo, quieres
moverte quieres crear
varias instancias de
un monolito, ¿verdad? varias instancias de
un monolito, ¿verdad De hecho, he trabajado
en una organización donde han tenido que
duplicar un monolito en
varias instancias, ¿verdad? Sí, eso en realidad es duradero. Pero el problema o la
desventaja de eso es que
descubres tomar por ejemplo, la parte que mencionamos anteriormente,
el servicio de correo electrónico Si escribimos un solo
servicio y ese servicio
suele estar disponible o fácilmente puede tomar miles de solicitudes, ya que estás enviando
a un servidor SMTP y que básicamente
maneja todo Ahora bien, si realmente estás
escalando monolitos, terminamos creando varias instancias de la aplicación de
correo electrónico que podrían no ser eficientes Tomemos por ejemplo,
o debería decir en comparación con solo crear
un solo servicio de correo electrónico, al
que todos
envían solicitud Ese podría ser un caso de uso
típico. También podríamos
mirar otra parte donde vemos que
los datos entre los datos,
los datos para o debería decir que el modelo D realmente no
maneja algo mucho. Pero en caso de
monolito, crecerá. Crecerá porque debería
decir, se duplicará. Esa es la palabra. Se
duplicará. Por qué para el micro servicio, solo
podrías determinar, ¿verdad? Simplemente cree una sola instancia
de este modelo en particular, y somos capaces de
manejar las cosas en lugar de simplemente enviar todo una y
otra vez para All right. Hablemos de desarrollo
y hablemos de desarrollo e
implementación, ¿verdad? Todo bien. La verdad es muy fácil de
desplegar porque
solo hay una cosa que
podría ser una vez que la
vuelvas a correr una
y otra vez, simplemente
sucede lo mismo, ¿verdad Pero para los micro servicios, ya que hay
varias bases de código podrían tener varios repositorios
o varios repositorios Git Necesitas crear tuberías para
todos y cada uno de ellos. Y eso solo agrega
un poco de
complejidad en comparación con solo Month que solo
implementaría una
sola base de código, y eso solo resuelve que solo
obtiene todo implementado. Bien, pasemos
a la siguiente sección. Mike, hablemos sobre el
aislamiento de moda y la resiliencia. La desventaja del monolito es
que si un componente falla,
todo falla, Un componente
falla, todo falla Pero para los microservicios,
podrías determinar, bien, si esta es una
sección que está fallando, esta parte no tiene que fallar Un buen ejemplo, un
buen ejemplo podría ser si tienes un servidor SMTP Solo estoy usando eso ya
que eso es con lo que empezamos. Tenemos un servidor SMTP, si te conectas con
él y falla no aceptar
conexiones, ¿verdad Estás intentando conectarte,
pero no está conectando para algunos, está mostrando
algún error extraño. Esa flecha, teniendo
ese extraño error, si te has aislado en
caso de un micro servicio, tienes un
servicio de emailing que solo un standalone ¿qué
pasaría en los casos Solo el SMTP o simplemente el servicio de correo electrónico
tendría problema, El servicio de correo electrónico
tendría problema. ¿Qué haría yo en este caso? Probablemente lo que
haría es que probablemente tenga un servicio de mensajería donde una cola de mensajería me refiero a
decir una cola de mensajería donde todos los mensajes realmente entran
o entran todas las solicitudes, y el
servicio de correo electrónico siempre puede
entrar para volver a intentar ver si
ha procesado el mensaje Entonces aunque cuando surja, siempre
puedes volver a intentar
todos estos correos electrónicos y sacar todo por ahí. Pero en el caso de Monolf, si ese
servicio de correo electrónico realmente falla, solo
ves que se baja toda la
aplicación Todo acaba de bajar. Aprovechemos tu oportunidad
para ponerla en marcha. Simplemente sigue
cayendo porque ese servicio de
correo electrónico no está funcionando Así que hasta que lo pongas en marcha, no
podrás implementar tu
aplicación, ¿verdad? O empiezas a recibir errores
raros que afectan a otros componentes de
la aplicación. Bien,
pila de tecnología, ¿verdad? Apilar solo significa, solo significa
diferentes idiomas pogammi. En caso de monolito,
solo una sola pila. Bueno, podría ser una tontería y podría ser una
no tan tontería En caso de mes
porque intentarás
hacer todo lo que necesites hacer
con un solo stack. En este caso, springbot Java. Digamos que algunos otros lenguajes
Pgammi prosperan en
un área en particular
más que springbot Java, es
decir, los microservicios en
realidad lo intentarían porque entonces solo
aislarías Básicamente solo aísla ese módulo o simplemente aísla
esa parte del servicio y la construyes como un servicio
separado y usas ese
lenguaje en particular para simplemente manejarlo. En fin, eso no
dice maderas primaverales. Creo que todavía encuentro mis
años de desarrollo. Muelle y muelle de madera
transportamos para manejar
prácticamente todos los casos de uso. Todo lo que pensé que
debería mencionarlo. Comunicación e Instegración. Creo que ya
hablamos de esto antes. Yo solo pensé que Baba acababa de
mencionar esto otra vez. Vemos que los micro servicios
se comunican a través de APIs. Siempre te comunicas a través de APIs. Podrías hacer algunos
probablemente a través de SOP, algunos a través del descanso o cualquier forma
de protocolo o debería decir un formato que realmente decidan pero en caso de monolito, simplemente
funciona Simplemente lo llamamos
función para hacer esto, solo lo llamamos
cable de servicio en servicio de servidor. La mayoría de las veces enumera si
no está diseñado correctamente. Conduce al código de espagueti, lleva a algo
de esa naturaleza. Pero sin embargo, no necesariamente. He visto sistema monolito correctamente diseñado donde
todo estaba bien arreglado Pero solo que veas tener
ese tipo de acoplamiento, ¿verdad? Pero Microservicios, solo hay
que
llamar a API o API de cable, yo podría manejar problemas, manejar excepciones, y
creo que esa es básicamente
la diferencia Vamos a pasar a los chicos. Sí. Esta es la última parte de la que
hablaremos. Hay varias
otras diferencias, pero solo quiero traer esto. Por último, hablemos de
complejidad y mantenimiento. Monolitos por defecto se vuelve
muy difícil, ¿verdad? He trabajado en el biz del
código donde
había miles
leí miles de líneas de código que abarcan diferentes archivos y
administrarlo es infernal de alguna manera Es realmente muy tedioso
manejarlo de verdad. No obstante, también he trabajado
en un sistema donde se
tiene un servicio en particular que hace una cosa y una sola
cosa, ¿verdad? Podrías tener uno que
sea solo todo el trabajo. Básicamente, todo lo que hace, en este caso, de
mi ejemplo anterior, solo manda correos electrónicos, ¿verdad? No tienes que hacer
nada. También he visto un servicio que fue construido. Todo lo que hace es
procesar transacciones. No interconecta
con el cliente. Yo sólo proceso transacciones. Entonces tenemos otro
servicio que realmente habla con los clientes,
recibió la solicitud, luego se obtiene la solicitud
y se envía a través una cola de mensajería
al otro servicio que está escuchando en ella y
que procesa. Entonces puedes una vez que
haya un problema, tratamos de identificar de dónde viene el
default, ya sea del primer servicio
o del segundo servicio, entonces tratamos de simplemente
rectificar las cosas Hay parte donde realmente se
puede hablar vía APIs y para ver como están las cosas, pero monolito se vuelve muy, muy, muy
tedioso Y se vuelve más tedioso cuando tienes
cosas cambiantes, Cuando tienes equipos
que están cambiando, y ahora necesitas manejar
muchos modelos o muchas
partes del código, se
vuelve muy tedioso de
manejar, Lo que nos lleva al
modulit primaveral. Esta definición que estás viendo
aquí era prácticamente un Picked off the documentary,
la documentación oficial. Yo
solo recompensé un poco de palmaditas pero es solo eso, ¿verdad? Entonces Spring modult es obstinado, Es un opinatedTolKit que favorece las aplicaciones
modulares impulsadas por dominios modulares Ese es el núcleo. Ese es el núcleo de
lo que trata de resolver. Hay un patrón
que debes seguir. En este caso, voy a ser
más directo al decir, hay
que seccionar las cosas. Debes asegurarte de cómo separas las cosas
correctamente en modelos. G por ejemplo anterior, tendrías un servicio de
correo electrónico en un modelo o paquete en particular Por lo tanto, los paquetes se calientan como
modelo en el modelo de primavera. Entonces lo tienes en
paquete o modelo separado. El servicio que procesa
tu transacción, ¿verdad? O digamos que tienes
un servicio de pago, ese servicio de pago
estaría dentro de un modelo. Cuando se tiene un o servicio, eso será dentro de un modelo. Cuando tienes que decir,
un inventario, un servicio de
inventario, lo
tienes dentro de
un modelo, ¿verdad? Las entidades, el servicio, todo será
con el modelo. Ahora bien, ¿qué
espera lograr esto? Cuidado ir el objetivo central es que se puede construir de
empezar como un monolito Si es necesario, decide que
las cosas deben enviarse desde un módulo en particular
se está volviendo demasiado grande y necesita enviarse
a un servicio separado. Simplemente puede copiar
todo el modo tal como es y volcarlo en una nueva aplicación de
spring booth, un nuevo servicio o una nueva
aplicación y las cosas solo poco solo poco
o ninguna configuración. Todo está
al día, ¿verdad? Todo está al día.
Esa es la belleza, ¿verdad? No hay que cambiar de
código porque lo que hay, todo ya es
autónomo de alguna manera, ¿verdad? El modo de comunicación, no se llama a funciones. No empiezas a llamar a
todos los servicios aquí y allá te comunicas
a través de eventos. Intentamos comunicarnos a
través de eventos. Entonces, ¿cómo mejora esto las cosas? Una vez que mueves esa aplicación, una vez que mueves ese módulo
a una aplicación separada, en lugar de comunicarte a través evento una vez que comienza a moverse, simplemente puedes
cambiarlo a API. Simplemente puede exponer la API y el servicio existente puede simplemente llamar a la API y conectar cosas. El módulo de resorte también es una
manera muy buena de ver
las cosas a ese respecto. Quiero tener esa
foto en nuestra mente. Tenemos paquetes, todo está claramente separado
en paquetes. Sobre tradicional que algunos de nosotros veríamos realmente
la aplicación. Ellos tendrán una
entidad, tú tienes un Post, tienes un paquete de servicios, luego tenemos un paquete de
implementación de servicios. Tenemos tal vez paquete de
YouTube ahora. En esta ocasión,
tendrías en este caso, hay un evento tienes
un paquete de inventario, que es un modelo. Todo es
autónomo, se postularon, el ent todo
está dentro de ahí Tienes el
servicio de pago o el pago, todo está dentro de esa parte. Si digamos también
tenemos un módulo de orden. Si el pedido necesita
hablar con el pago, simplemente envía un
evento a pago. Después hay un oyente
sobre los pagos y
solo recibo lo recibe y lo procesa Creo que basta de la teoría, únete a mí en el siguiente código. Únete a mí en el nido en
la siguiente diapositiva o simplemente en el siguiente video a menos que
te metas directamente en él. Este es un
práctico costo práctico. Gracias chicos.
Te veré en el siguiente video.
4. Lo que construiremos: Todo bien. Oye, Evon, aquí Se supone que este es un
video relativamente corto solo para
mostrarles exactamente lo que
pretendemos construir, cómo los módulos
están mal estructurados y cómo básicamente van a
estar hablando entre Como puedes ver,
tenemos el modelo de correo electrónico, el modo excepción,
quiero decir, digo, ves todos los módulos básicamente hablando a
la excepción
porque solo habla de un
modelo un modelo en particular. Y veremos aquí que el otro envío de eventos al
pago y al correo electrónico. Básicamente, el pago y correo electrónico están escuchando
al otro, habrá alguna aplicación
escuche aquí y aquí en realidad
tendrán editor de
eventos. Bien. Y vemos que también hay
un modo llamado acción de eventos. A esto se le llama inventario, que en realidad es este tipo
va a estar dependiendo de esto y va a estar usando esto pero
no dependiendo de esto, derecho. Y esto será dependiendo de
excepción dependiendo excepto. Entonces esta es una visión general total, y me propongo esto. Entonces solo tenemos una imagen
completa en mente, así que compartiré esto
en el recurso, para que podamos ver exactamente cómo se supone que va
a funcionar esto, ¿verdad? Y podríamos tener acceso a él también al repositorio de Git. Bien, gracias chicos. Te
veré en el siguiente video.
5. Dependencias en Bootstrapping: Todo bien. Oigan, chicos, estaremos explorando la dependencia que deberían estar usando para
este curso. Todo bien. Estoy usando primavera
Intelligen lo siento, realidad
estoy usando el En realidad estoy usando intelligen
Ultimate y puedo aumentar la dependencia directamente
desde dentro del IDE No obstante, para aquellos que
usan spring spring, creo que es STS creo que es SDS si STS esos
realmente usan eclipse De hecho podrías venir a
comenzar tu primavera yo elijo la versión que quieras y la dependencia es
que voy a estar compartiendo desde dentro de Intellij, entonces realmente coloco
eso en, Ahora, por favor tenga en cuenta, le
recomendaría usar 3d30 y no de tres a
dos a seis, ¿verdad Si 3d30 y mayor está bien, por favor no use de
tres a dos a seis Y la razón es porque
hay un aspecto de los módulos de resorte
estaremos discutiendo cuál es el
módulo abierto, ¿verdad? Aún no está disponible. 32z ya está disponible 3d30. Así que elige cualquier cosa 3-3 a
cero y debería estar bien. Así que recomiendo al usuario
Java 21 porque
básicamente estaría usando el comercio virtual de
primavera. Pero sin embargo, no está
realmente decidido por esto porque podemos ir por
cualquier cosa menor, ¿verdad? Pero
solo quería mencionar eso. Elige gradle maven,
lo que sea que te sienta cómodo
desarrollando lo que te gusta usar o tienes
preferencia, Y eso simplemente va a estar bien. Todo bien. Exploremos las
dependencias. Todo bien. Voy a ir allá aspecto
del nuevo proyecto. Sí, entonces voy a
recoger la caseta de primavera. Todo bien. Caseta de primavera. Sí, estaría
llamando esta primavera. Voy a estar llamando a este módulo de primavera primavera Modulth curso Spring
Modulth Iré a recoger a Maven. Estoy usando a Maven. Entonces me gusta usar
mi apodo llamar Ms cozi solo lo llamaré
el grupo elige el grupo Dejaré todo como está, después me imagino como preferencia alrededor del
21. Para mí, entonces creo que eso
debería ser sobre eso para poder pasar a elegir dependencias. Creo que
esto está bien. Sí. Entonces, sigamos adelante. Todo bien. Una dependencia inicial es después de que todo esté
cargado o en el medio, voy a empezar a explicar qué hace
cada una de estas
dependencias. La primera dependencia
que vas a estar recogiendo es web usando web que realmente
podemos probar, poder realmente golpear
ts desde el controlador o desde el sorry desde el
controlador, básicamente, también
estaría escogiendo el
GP usando GP en este curso, usando GP en este curso. Entonces también soy un gran
fan de umbok sí. Como gran parte del umbo. Además, estaremos usando
Docker componer. Antes de eso, ya que
acabo de elegir a JP, solo escoge al piloto de Postgress porque estoy usando Postgress Entonces escogeré
Docker componer. Sí. Todo bien. Así que vamos a
tener esto conectado, y este debería
ser un buen arrancador para que podamos proceder realmente. Ya ves que estoy recogiendo 330. Empecemos y
veamos exactamente cómo esto nos
puede ayudar mientras se acerca
esto, entonces voy a explicar qué hacen
todas las dependencias Todo bien. Bien, voy a cargar esto en
esta ventana en particular. Bien, ¿ves que viene esto? Sí, sí. Se acerca. Vamos a saltar una carga. Exploremos rápidamente
esto para que esto realmente llegue a terminar.
Eso es bastante rápido. Derecha. Entonces esto es básicamente
las dependencias. Ahora, GPA GPA realmente ayuda a
GPA en realidad características. Las características de GPA son implementaciones
una implementación. Básicamente para la
implementación de Is que en realidad usa un hybernt no sé lo que
me falta mi sistema de palabras Es es hybernt que
es un ORM muy grande,
un ORM muy grande, un ORM muy grande, e hibernt es una de las especificaciones,
una de
la implementación de la especificación GPA una de
la implementación de la especificación GPA Si revisas documentación de
verificación real, especificación de
JPA, creo que
hay dos básicamente, W creo que un hibernto es en realidad más ampliamente utilizado
y yo diría, debería decir que es
más compatible También tenemos la web web es
básicamente lo que te ayuda. Tienes cosas como
los controladores,
los contextos de primavera
y los gustos. Esto en realidad trae
eso en Docker Compose. Docker Compose es una
excelente manera de probar. Para aquellos de ustedes que
están familiarizados con Docker, esta no es
una corte Docker, pero haré todo lo
posible para poder mostrar un poco aquí
y allá sobre Esto te ayuda a hacer aleta OG. Lo que te ayuda a hacer es
que no tienes que definir no tienes que
definir tus propiedades
dentro de tu aplicación, las propiedades o aplicación
Yamel que solo haría propiedades Yam pero
estaría haciendo algunos
cambios desde aquí Rápidamente factorial esto. Soy un gran fan de Yamel. Realmente no me gustan
las propiedades, ¿verdad? Entonces la junta funciona igual. Por favor,
no hay mejor opción, pero la placa realmente funciona en. Para que no tengas que
definir tu propiedad. Por lo que si nota al colocar
en el docker componen, se cables en esta guía Automáticamente obtienes
al compositor Yarmo. Entonces un compositor Yermo es donde significa
que cuando tienes un docker, una instancia de Docker arriba y un
motor Docker deca Docker está funcionando, ya no
tienes que escribir Lo que hará la primavera es
que inspeccionará esto. Una vez que inspeccione esto entonces para conectarse a usted automáticamente Vemos esa inacción en realidad a medida que
avanzamos, eso lo vemos en acción Esta parte es solo para que
solo expliquemos la dependencia y veamos cómo las dependencias en realidad
estamos trayendo Sí, estoy usando Posgus para esto. Siéntete libre de usar
cualquier otro controlador o debería enviarte esa
base de datos Nest driver. Entonces tenemos Pujet umbo. Esto te ayuda a reducir
muchos códigos abreviados
como vemos durante la
cancha básicamente, esto es lo que tenemos ahora
mismo, ¿verdad Es esto con lo que
vamos a empezar. Y solo para envolver
este video rápido, me estaré comunicando
o debería decir,
voy a estar empujando
esto a GitHub, que es mi proyecto de inicio. Ya tengo esa configuración. Simplemente empujaré esto para
levantarme o meterme en él. Se mete en él,
hay que inicializarlo. Entonces, ¿está conmigo aquí? No hay conmigo. Me
encanta agregar con miss a mi co Let's Let's
just do New file. Leer met ND. Puedes agregar en algunas notas cuando realmente sea necesario
para nosotros. Eso lo tenemos. Entonces en realidad estoy
empujando a Github, así que básicamente me ves tratando de avanzar como si estuviéramos tratando
de movernos a Github. Tenemos un agregado de Git Git
para
empujar realmente para obtener solo puntos. El punto lo que hace, recoge todo lo que hay dentro de este
archivo que luego también comprueba Gign e ignora lo que no
se supone que realmente
vaya al sitio remoto Entonces, ¿qué más? Entonces, así que vamos a comprometernos.
Bueno, antes de comprometerme. No me gustaría empujar
esto porque tengo Gits guardian ya integrado dentro de mi sistema. ¿Qué hace
git guardian? Solo puedes
buscarlo, guardián de Git. Lo que
hace Git Guardian es que parece todas las cosas como contraseñas de nombre de
usuario, y
te impide empujar. Si empujas,
en realidad
te va a marcar bien y te enviará un correo electrónico. Entonces voy a tratar Voy a eliminar esto para que no
me marquen. Pero como ya
sabes lo que hace esto, al
menos sabemos exactamente
cómo usarlo mejor. Así que voy a hacer retroceder esto. No voy a empujar esto
en la redacción de Locker. Entonces tengo entonces me comete. Ese es mi primer commit. Mis primeros commits, así
que son mis primeros commits. Este es mi primer
compromiso. Entonces cambiaré la sucursal
porque Gits Hub realmente recomienda
que cambies rama a principal
en lugar de Master Tú prefieres principal que
Maestro, haz esto M. Entonces empujo esto adentro. Entonces todos estos comandos
están disponibles en Github. Una vez que quieres iniciar un nuevo
proyecto y es público, ves todos estos comandos, así que no estoy haciendo nada nuevo, se vuelve remoto luego agrega
origin bring in the URL. Yo hice algo
especial en mi sistema, así que solo algo de
configuración, ¿verdad? Probablemente
lo explore más adelante, pero no creo que sea
realmente necesario. No tengo que poner en la URL, ya
tengo un archivo de
configuración. Cada vez que agrego
algo así, esto algo así como
esto llaman proyectos. Entonces esto solo comprueba el BaSur automáticamente y
simplemente se lo reenvía a este tipo Entonces sí, lo hago así que vamos a revisar push eso es ginebra, luego principal. Eso realmente empuja a GitHub. Todo bien. Esto es exactamente
lo que hice como entrenador, no
hice nada especial. Una vez que intentas crear
un repositorio público, ves que todos estos
comandos están todos ahí, solo
puedes cablear indirectamente, ahora mismo que empujé, si acabo de reiniciar esto, deberíamos poder
ver todo aquí. Y todo lo que entra. Todo
bien. Entonces lo tenemos aquí. Bien, entonces no
sé creo que esta sesión esta parte
va muy larga. Se supone que es un video muy
corto solo para ver cómo arrancamos
las dependencias en Todo bien. Bien.
Gracias, chicos. Todo bien. En realidad
buscamos el siguiente video.
6. Explora Spring Boot Docker: Bien. Oigan, chicos.
Bien, entonces esta sesión estará explorando trampolín
docker componer Springboard Docker componer. Entonces lo que he hecho es
más que usar lo último, he podido
cambiar esto a 16 o dos. Entonces, porque soy bastante consciente cuando los chicos de
Post hacen algunos cambios
importantes, siempre
hay un problema con compatibilidad de
copias de seguridad excepto que haces algún tipo de configuración
adicional. Así que cambié Analista
puedo ver antes de ahora, creo que teníamos esto como mi
base de datos ese usuario, mi usuario, secreto ir algo ya escuchado así que en
realidad podemos seguir adelante. Todo bien. Entonces como llegamos
a esta sección de volumen, la razón por la que tenemos
esto es muy directa. Lo que esto básicamente
hace es componer lo siento, los contenedores
Docker son efímeros, es
decir, no duran Ellos no lo
hacen no no persisten. Entonces, lo que significa cuando
el contenedor muere, o tus datos que tienes dentro de
él mueren junto con él. Entonces, lo que estoy haciendo es
que en realidad estoy mapeando esto para que guarde esos
datos en mi sistema local. Ocho. Eso es exactamente lo
que estoy tratando de explorar aquí. Entonces, amigo mío,
¿cómo conseguí esto? ¿Cómo llego
a través de esto es todo. Entonces miraríamos
esto es Docker Hub. Así que para que sepas exactamente
cómo llegué al respecto, cuando voy a Docker Hub
a escribir Postgres Postgres. Sí, Postgresa Lupus adivina simplemente desplácese hacia abajo. Siempre hay un
camino donde se
habla de usar los
datos, ¿ves esta parte? Datos. Uno se monta en el volumen, esta parte es un volumen de
los datos de OCCats que no se persiste
en el volumen de montaña Así se puede ver esto.
Siempre es recomendable. Te mueves si
lees esta parte así que yo solo escojo
el ejemplo de aquí. Si usa Linux Mac, solo
vas a usar
tus partes personalizadas. Por eso esta parte
fue escrita a medida. Piezas personalizadas, lo
mapean a esto. Aquí es donde los datos persisten dentro del contenedor Docker Simplemente mapea eso lo que hice. Todo bien. Entonces ahí lo tenemos. Sí. Y así solo borra esto. Ahora, puedo eliminar fácilmente de mi contenedor Docker
cuando quiera Puedo eliminar este contenedor
porque ahora soy persistente. Así puedo asegurarme de que mis
datos están realmente ahí. Ahora, creo que podemos ejecutar esto. Vamos a sacar esto. Veamos qué pasa. Veamos qué pasa. Todo bien. Bien, bien. Bien. ¿Qué está pasando? Esto es un error. El error de error es vamos a ver. Esto es extraño porque
sé que esto debería funcionar automáticamente sin ninguna
creo que estoy haciendo
algo mal aquí. Todo bien.
Déjame publicar este video y volveré gli
volveré en un minuto. Muy bien chicos. He
podido averiguarlo. Lo que noté fue que
estaba usando una
contraseña incorrecta y una incorrecta. Estabas preguntando,
¿cómo está mal? Pensé que estaba renunciando
desde el principio. Lo que trato de hacer personalmente
es que trabaje en varios proyectos con
varios proyectos. Simplemente dejo diferentes
maquinadores para ellos dentro de la base de datos
Postgres, diferentes esquemers, los
mismos datos para que no
tenga no sé cómo mis
datos se dispersaron por Yo sólo los guardo en
ese orden en particular. ¿Cómo? Básicamente, ahora estaba
usando una contraseña diferente. Para una base de datos que ya existe, debe ser
la misma contraseña. ¿Cómo lo he
averiguado? Así es como lo hice. Si te metes en este tipo, yo puedo ejecutar esto directamente, puedo ejecutar esto directamente. Entonces Intelligent tiene integración
directa para que realmente
ejecutes esta línea directa ya ves cómo funciona esto. Entonces si revisas, puedo revisar los registros, solo sigue esta
parte. Ver los registros. Entonces estás diciendo que
arranque acepta conexión. Vamos a ejecutar la
aplicación y
verás los registros que
realmente aparecen aquí. Ejecuta la aplicación y
vemos exactamente a lo que
nos enfrentamos antes. El mismo error. El mismo
error simplemente saldrá a la luz. Boom. Bien, vea el error y este error es el mismo error. Ahora bien, ¿cómo obtuve
error de ventana al entrar aquí, si nos fijamos en esto,
campo de parscation para usuario Ese es el tema. Yo no
estaba correlacionando Esta es la
contraseña correcta que usé básicamente. Lo que voy a hacer es
simplemente borrar a este tipo. Con esto, voy a
detener este contenedor para que ahora podamos elegir la contraseña correcta y
realmente agregarla. Voy a detener este contenedor.
Voy a detener esto. Entonces recuerda, creo que
no mencioné esta característica. Una vez que inicia la
aplicación, se abre el contenedor
Docker Una vez que detienes la aplicación,
la baja. Pero si quieres que la
base de datos siga funcionando, simplemente
puedes
iniciarla directamente. Lo ejecutas manualmente para aquellos que están bastante
familiarizados con ¿Puedo usar Docker Run the put in all
put in the details, derecho Pero siempre es un comando
largo muy raro que no recomiendo. El componer es
en realidad una buena manera. Entonces ahora que he arreglado a este tipo. Ahora vamos a ejecutarlo directamente y veamos exactamente cómo funciona. Todo bien. Hagamos esto. Bien, está
subiendo, viene. Bien, ya ves, el error se ha ido, así que esa fue la solución. He podido explicar
lo que Docker Compose hace
físicamente, y como pueden ver muy bien, no
había ninguna propiedad, ninguna propiedad de conexión de
base Pero esto es sólo
para la prueba, por favor. Esto no es para producción.
Es sólo para pruebas. Si quieres pasar
a producción, quiero hacer algo de despliegue que hará al final posterior
del curso eliminar
Docker componer y usar las propiedades reales
para que podamos realmente ayudar a esto Bien,
esta es una introducción muy
rápida a cómo funciona Spring Boots Docker componer y vemos que solo
puedo seguir desarrollando sin tener quiero hacer algo de despliegue
que hará al final posterior
del curso eliminar
Docker componer y usar
las propiedades reales
para que podamos
realmente ayudar a esto Bien,
esta es una introducción muy
rápida
a cómo funciona Spring Boots Docker
componer y vemos que solo
puedo seguir desarrollando sin tener
todas
estas cosas aquí. Todo bien. Gracias, chicos. Bien entonces.
Te veré. Adiós.
7. Explora la dependencia de Spring Modulith: Sí. Hola, chicos. Esto
es Z aquí. Todo bien. En esta ocasión,
estaremos explorando. Hemos podido hacer
un poco de configuración. Ahora es el momento de traer en el modulif de primavera
el Lo que suelo hacer es que cuando tengo un proyecto
ya ejecutado y
quiero ver exactamente cómo actualizar las dependencias,
usaría esto Ahora bien, esta fue una nueva incorporación
de InteligGS. Gracias, chicos. Gracias, Intellig. Sí, solo
puedes hacer clic en esto. Y es para cargar
lo que tienes antes, luego conectas nuevas propiedades. Ahora bien, para los que están
usando eclipse y
me gusta, no sé si
tienes esa característica. Lo siento, no he
podido explorar eclipse. Lo que puedes hacer es luego agregar en la dependencia como
los módulos que estás a
punto de agregar una vez que lo hayas agregado y luego hacer clic
en Explorar Una vez que exploras,
entonces puedes comparar esta versión para ver
lo que falta, luego agregarla a tu proyecto. Solo pensé que
en realidad debería mencionarlo. Qué haría yo
usaría mi manera fantasiosa. Tenga en cuenta amablemente. Me encanta Intellij ultimate. Traigo esto, así que sólo voy a
traer en primavera modelarlo. Módulo es nuestro
próximo plan de acción. Al traer esto,
hagamos clic en esto. Veré qué pasaría. La magia sucede. ¿Puedes
ver? Todo acaba de entrar. Boom, boom,
boom, boom, boom. Todo acaba
de entrar. todo realmente cableado
en todo lo que necesitamos. Se ve el modelo
traído en el núcleo, trajo en la prueba,
trajo en el GPA Ih uno, me gusta
reorganizar las cosas, así que creo que esto debería bajarse Voy a derribar esto. Realmente no tiene ningún significado pero simplemente me encanta
arreglar un poco las cosas. Me encanta mover a los chicos
principales en la parte superior, bajan las pruebas. Entonces esta es una
prueba. Sólo tienes que bajarlo solo una carne de
preferencia personal, entonces voy a tomar esta prueba
también la prueba de modular, entonces solo la voy a bajar. Entonces creo que debería ser así. Creo que debería
ser así que solo sé ruidoso. Entonces después de cargar y este
tipo está en lo siguiente es, vamos a explorar un poco el
módulo de primavera, ¿verdad? Vamos a explorar algunas
de las propiedades, ¿
verdad? Sólo un poquito. Pero en realidad me
adentraría en la sesión cuando
empecemos a utilizarlas. Yo sólo quiero
que ustedes vean dónde encontrarlos, dónde usarlos. Entonces en inteligente, hay algo llamado
las dependencias externas M mira muestra
todo lo que lo conectaste. Entonces estas versiones móviles, si es bueno ves Grado vas a poder vender
dependencias, ¿verdad Entonces estas son las dependencias
que lo cablearon y se puede ver el modulador está adentro. Modular. Lo que voy a hacer es ir
entonces a este camino e irme a Modult de primavera Eso es una preocupación primavera modult. Vamos a ver
lo que hay en el núcleo. Veamos qué hay en el núcleo. Hay un concepto llamado módulo
de aplicación. Ese es un nivel de
código. Eso no es trabajo. Yo los había confundido chicos. ¿Eso es trabajo? La idea es
simplificar esto. Yo sólo
te mostraré. Solo quiero mostrar que estas cosas
están disponibles aquí. En realidad están disponibles. Aquí es donde tienes todos los detalles de nuestros manantiales se hace
mucho trabajo para
nosotros en el fondo. La mayoría de las veces cuando
usamos algunas cosas en la superficie y no
sabemos exactamente lo que está
sucediendo en el fondo, posible que realmente no
apreciemos lo que se está haciendo. Estaremos explorando cosas
llamadas interfaz de nombre. Vamos a usar la interfaz de nombre. Estaremos usando el
paquete Java, no esto directamente, sino el paquete usando
el paquete que es info. Yo usando eso. Este módulo de aplicación también
viene en modelo de aplicación. No voy a querer escribir realmente nuestra prueba porque
escribimos un poco de prueba. Este tipo también viene usando a estos tipos para que veamos
exactamente cómo funciona aquí. Vamos a revisar. Exploremos
los bits de API, API. Esta es la API.
Mira la API, así que hay esta parte también esta publicación del evento
que vamos a estar explorando. Exploraremos publicaciones de
eventos finalizadas, publicaciones eventos
incompletas. Hacemos algunas
cosas dinámicas alrededor de esto, algunas cosas dinámicas únicas. Solo pensé en mostrarles
chicos para que ustedes vean exactamente cómo funciona esto y
estaríamos saltando
justo para que
veamos cómo básicamente trabajo. ¿Es
algo realmente increíble de usar? Es realmente yo era realmente, realmente un zo increíble para ti. Entonces solo quería explorar
eso para que
sepamos cómo funciona esto físicamente. Entonces este es un modef de primavera. Spring moduli, creo que
algo que bastante rápido
quiero mostrarles chicos Ah, sí, este tipo de este tipo. Ves este tipo. Ahora
tenemos algo llamado pistas. También hay un abierto. Antes de ahora, esto no
estaba disponible. Por eso
recomendé que usemos 30. No teníamos prueba antes. Pero ahora tenemos este modo de
aplicación, quiere usar open closed. Yo explicaría todas
estas preocupaciones para que ustedes sepan exactamente
lo que significa, ¿verdad? Yo solo quería
mostrarles que este fue el tardio reciente cuando
nos mudamos a 1d20 Antes de eso, era Window 20, yo era CRN, pero ahora
es una topadora D dos Esto es algo bueno. Otra cosa que quiero
hacer es que ahora que he cableado esto estaré escribiendo
un código para hacer las cosas. Básicamente, probablemente
querría cambiar más hasta ahora,
estas dependencias, probablemente
quiera crear un problema de Github,
y mapeé todo
con un problema de Gitub Creo que tengo ventanas de bro arriba. Gitub. ¿Cómo se crea un
problema de Github muy simple Vayamos a Github,
creamos problema. Entonces solo voy a hacer esto
y llamémoslo un cableado en dependencias,
dependencias, independencias de cableado Entonces también quiero crear otro que ya
has hecho antes, que es explorar Spring booth. Bota de resorte. Lo siento. Sin caseta. Componen botas de primavera. Esto hace un seguimiento de lo que
estamos haciendo para que sepamos exactamente cómo hemos ido hasta ahora. Déjame ir a esto.
Estos son los chicos. Voy a estar cometiendo
contra ellos. Entonces creo que eso es todo. Entonces les estaré mostrando
una cosa más al final, hagamos esto hacer Git commits. Lo siento, sé que a algunas
personas les encanta usar la interfaz o
Git commits y no. Yo realmente solo estoy acostumbrado a la línea de
comandos. En realidad me encanta. Si consigues commits, entonces traeré
el nombre, explorando. Explorando a este
tipo. Entonces esta para que tengas que usar
esta palabra clave se cierra. Cierra luego el ID. Entonces esta también
las dependencias de cableado hago de
esta la primera Entonces puedes poner cierre múltiple, o puedes cerrar
múltiples dentro de él. Así cierra. En el momento en que Git Hubble
escanea a través de esto. En el momento en que mira
esto y ve que la palabra clave se cierra y ve la identificación y asiste también
cerrará a este tipo. Se puede ver que el ID
realmente coincide. Este es el ID a si
abro uno de ellos, se
puede ver ID es el ID. Simplemente
cerraría rápidamente y rápidamente tiraba hacia atrás esta ventana y
veía cómo funciona. Déjame cerrar esto entonces va a través
del empujón consigue empujar. Sí. Vamos a explorar el que está hecho. Ves que esto está hecho. Vamos a refrescar esto. Todo
bien. No más temas. Porque ¿por qué? Están cerrados. Porque ella cerró
por eso dije el símbolo
aquí, están cerrados. O expe comenzamos a usar
Etiquetas Adhesivas. No estoy segura. Obtienes el ist. A partir de aquí, empezaremos a hablar desde
el siguiente video, comenzaremos a hablar sobre
los dominios que
usaremos como entidades
que usaremos para explorar
realmente la modulación de
primavera Gracias chicos. Todo
bien. Nos vemos la próxima vez.
8. Definición de entidad 1: Hola ahí. Todo bien. Esto
es Z otra vez. Todo bien. Entonces estaríamos definiendo nuestras dependencias o
definimos nuestras entidades, ¿verdad? Estamos definiendo nuestras
entidades en este video. Bien, así que sin perder mucho tiempo, vamos a
meternos en ello. Principalmente estaremos haciendo
uso de algunas entidades. Creo que declaramos
otro más adelante, pero profundicemos rápidamente en ello. Entonces, para empezar, vamos a necesitar
si básicamente digo,
recuerden, recuerden que en realidad nos
ocupamos de módulos de resorte. Así que solo como recordatorio, y Spring Modulate
realmente resuelve mayoría de los desafíos
para aquellos que
no están del todo seguros de si realmente van
a crear un monolito o si van
a pasar a un Spring modult te ayuda a crear una transición donde
puedas moverte fácilmente, ¿verdad Porque la verdad es que hay algunas aplicaciones de las que
quizás nunca puedas
tener un concepto completo o un
suspiro completo de si va a ser un monolito o si
va a ser un Pero sin embargo, la primavera
Modult puente un budges du de tal manera que se puede
comenzar con un monolito, luego la transición Todo bien. Vamos a
meternos en él para ver las entidades que
usaremos para realmente hacer esto. En consecuencia, estaré
usando una de las cosas que claramente especificó o claramente señalaba en
el módulo de resorte, todo se
maneja como modelo. Y por modelo, nos referimos a paquetes. Por modelo, nos referimos a paquetes. Cada paquete básicamente
contendría todo lo
definido dentro de sí mismo. Entonces la idea detrás de esto es que
si ya estás listo para
moverte, puedes simplemente mover ese
módulo como está a un servicio separado con
poca o ninguna configuración, ese tipo es bueno para ir como servicio
separado por sí solo. Ese es el concepto que quiero
que tengamos realmente en mente. ¿Verdad? Cuando estamos construyendo estos cortes en diferentes paquetes, debe
asegurarse de que
cada una de sus entidades o entidades relacionadas estén en
un lugar en particular
y puedan moverse fácilmente Así que en realidad favorecemos un fuerte desacoplamiento para que sea fácil
mover las cosas Bien, vamos a meternos en ello.
Lo primero en lo que vamos a estar trabajando es,
vamos a sumergirnos en ello. Vamos a sumergirnos en ello.
Tenemos un inventario. Tener un inventario, y
al parecer necesitar una entidad, llamar a eso un
inventario de inventario. Necesito un inventario y
al parecer no es un JPA, así que solo voy a cablear
las cosas en Sí Espero que todos
estén familiarizados con el libro de registro, así que nos facilita
saber exactamente cómo estamos
definiendo las cosas Entonces usando un privado, mi identificación va a ser larga. Entonces el uso de un privado
un nombre de calle privada, luego una privada, luego una privada. Me encanta lo inteligente para esto. A, IA físicamente te da
sugerencias, solo trabaja. Prefiero que mi
pase sea largo. Alguien podría querer preguntar por qué usas mucho en lugar D. Habiendo trabajado en el espacio de
pago por un tiempo, me he dado cuenta de que
prefieres trabajar con
largo en lugar doble es decir que imagina que
tienes algo como digamos que yo Nigeria five ny 535 nyra Cuando
haces divisiones, multiplicaciones,
adiciones, y los gustos, no
tienes que lidiar
con esta cifra. Esto causa muchos
problemas, ¿verdad? Incluso en el espacio de pago, varios problemas podrían incluso causar demandas que me
pagaron mal, me engañaron, y como porque
estas cosas pueden crecer exponencialmente
dependiendo de lo que
realmente lo que el cálculo Entonces preferiría, ¿verdad? Usa un pulmón. Así que un largo
básicamente circo esto. Entonces de esta manera, aclaras totalmente el aspecto de usar un lugar decimal, y eso te ayuda a ejecutar
tu cálculo fácilmente. Entonces cuando descargues la finalización y
todo, todo, quieres enviar tus
datos o la factura
al cliente o recibir
pagos y me gusta. Entonces, si estás enviando un doble, puedes simplemente multiplicar por 100, correcto, y simplemente leer
todo como un largo. Cuando quieras enviar de
vuelta, sal de tu sistema, simplemente divides por 100 y
recuperas tu decimal, y eso solo es el escenario. Gracias. Tenemos esto. Esta es una entidad, por lo
que hay que etiquetarla como entidad. También como tabla, habrá algún índice
para estar colocando. Usemos índices,
luego en índice, en índice, entonces ¿cuál es
el nombre del índice? Quiero nombrarlo INV name index
el nombre porque va a
estar recuperando por Necesitamos nombres para
ayudar primero a una columna. Entonces para
permitir realmente
permitir realmente la primera lectura del campo
de nombre, ¿verdad? Estoy seguro de que somos conscientes
de lo que la indexación hace complejidad espacio-tiempo Aumenta el tiempo, pero sea que llegues a tener un espacio, llegas a tener una
desventaja de espacio extra, ¿verdad? Después se agotaron. Bien, entonces la lista de columnas, estamos apuntando así que esto debe
corresponder al nombre exacto Entonces, si tuvieras
algo así como, digamos,
columna aquí, y
luego la columna, lo que definías como el nombre no
era NAM, por ejemplo, lo que deberías
usar debería ser lo que eventualmente debería estar en la
base de datos y no tu campo. Por favor, tenga en cuenta eso. Si estás usando una columna, esto debería corresponder a lo
que estás usando como columna. Pero si esto no está
disponible, usa esto. Si, por ejemplo,
también tienes algo así como también tienes algo así como vamos a
llamarlo campo de nombre. Por ejemplo, así es
como lo definís. Al parecer, si
quieres usar esto así, tiene
que ser este formato
porque eso es con formato. Así es como leerlo porque mayoría de las veces cuando el mapeador bin en realidad
está mapeando cosas, literalmente mapeando tu campo
a los objetos de la base de datos, verías que todas
estas letras de bloque se transforman y
tienes algo como esto Menciona el señor Aasha que
sigamos adelante. Todo bien. Esto significa que
necesitamos definir ID, por lo que este sería un ID. Sí. Entonces generó valor sí, quiero una identidad. Simplemente me encanta Intellig Jon es
IntelligTS. Eso me encanta. A entonces quiero que esto no sea cognoscible,
esto no
debería ser cognoscible Entonces quiero que sea
único, quiero único. Es un poco ser único es
diferente del índice. El índice es para el tiempo de anuncio. Por qué la singularidad es decir que no quiero que ningún
objeto tenga exactamente lo mismo No quiero que ningún objeto de invención
tenga el mismo campo de nombre Por eso el nombre
debe ser único. Una vez definido eso,
sigamos
adelante rápidamente y definamos sigamos rápidamente para definir el repositorio, definir
el repositorio. Bien, aquí mismo, solo toma a este tipo y voy a
estar creando una interfaz. Estoy seguro de que probablemente esté
familiarizado con el uso interfaces o el
uso del procedimiento GPA,
solo defina rápidamente eso Voy a llamar a este inventario. Int, qué estoy escribiendo. Inventario, A positu. Así que básicamente se extiende, sí, el co depositante,
estoy usando un largo, no un entero, largo un incigor.Esto es
físico necesario, pero me encanta actuar solo para
dar a los videos de
mi código más perspectiva de lo que
haces En cambio, quieren
obtenerlo eventualmente por su nombre. Entonces sí, quiero esto,
pero no por su nombre. Quiero esto, quiero
encontrar por inventario. Encuentra por eventryEncuentra entrada, multa eventual eventu
Botas funciona bien evento o encuentra Esto es. Bien, hay
otra varianza que me encantaría
mostrarle muy rápido, así que ese no es el alcance de esta cancha que solo
quiero mostrarle. También podrías usar G
B. Esto también funciona. Entonces ya ves, puedes
usar get y está bien. Ves que algunas personas tienen
favor más de usar get. Entonces es justo lo que
realmente aceptas
usar en la empresa en la que
trabajas o en el proyecto en el
que estás trabajando. Entonces puedes usar define by get by, pero solo siento que debería
ser convencional como dijiste, tienes esta convención donde sigues
estrictamente, ¿verdad? Sigues estrictamente
el definir o el get. Bien, vamos a ceñirnos a probablemente sólo voy a pegar para
conseguir sólo me quedo para conseguir. Enfermo de llegar porque sé que
mucha gente está
familiarizada con encontrar, así que solo
lo ponen ahí afuera que
dice que se pone entonces
también estaría necesitando esto
también estar necesitando esto. Voy a necesitar evento por evento sí dame
demasiadas sugerencias. Incluso por su nombre. Sí, por su nombre en. Al parecer esto
necesitaría una lista. Pasas una lista de nombres, luego básicamente el SQ necesario, luego pasas una lista de para buscar por todos esos nombres y obtener que vamos a
estar necesitando eso. Creo que hemos terminado con
estas partes vamos a pasar a también
estaría necesitando un modelo. Módulo O. Otro modo. Para el otro módulo básicamente. Entonces estaríamos necesitarías
esto ir con el pedido. Al parecer, necesitamos la orden. Por favor, no hagas esto
en casa. No copie. Al parecer, no lo copies. Entonces, solo hace que esto
funcione más rápido, bien. Entonces entonces creo que
quiero ponerle un nombre a esto. Ahora la razón por la que
quiero usar. La razón por la que quiero
cambiar este nombre es porque recuerda en SQL, tienes algo como
tal vez consigue algo, probablemente hagas seleccionar
estrella de una tabla, luego ordenar por quieres
ordenar por, digamos, ID. Esta es una palabra clave reservada.
Es una palabra clave reservada. Si estás usando
orden, es por eso que estoy cambiando y
colocando un pedido de SSs, para que no
entre en conflicto con esto Es por eso que la mayoría de las veces
descubres por qué usas el mismo nombre que realidad
es una
palabra clave especial en la base de datos. Verás que JP básicamente muestra un error una vez que realmente
ejecutas la aplicación. Yo sólo quería
mencionarlo. Tenemos esto. Entonces estaría necesitando un largo. ID largo, luego una cadena privada, supongo que llamar a este identificador de
orden. Todo se unirá
pronto, identificador de pedido. Entonces también tengo un nombre de cliente de
cadena privada, luego una cadena privada
privada privada. Creo que solo puedes
hacer un Ps. Deberían funcionar. Entonces una marca de tiempo privada
porque estoy usando sello PostgreSST Una marca de tiempo privada o esta, entonces hay que asegurarse de que es un Java SQ que estamos usando porque eso es lo que
vamos a ser interpretados
a la Entonces quiero estudiar
default en vez de esto, no
quiero millis Ither do
instant Instance dot now Quiero hacer Instant, eso debería ser si
ese es el caso, debería
ser timestamp from De. Bien. Esto
funciona. Esto funciona. Entonces algo también único. Quiero agregar un estatus privado. Necesitamos un status, estatus
privado, status, entonces quiero que sean
los diferidos Así que al igual
que cuando tienes una orden, el otro sigue
abierto o tus otros cerrados o el otro falló. Entonces básicamente, eso es lo que el estatus que estoy
tratando de representar aquí. Entonces el estado, el estatus, eso es abierto. Entonces ahora es el momento de
definir nuestro estatus. Así que creo dentro de este otro paquete
llamado tipo C type, entonces aparentemente
sea annum num status Entonces sería de dos tipos, abierta, luego terminada. Creo que esto funciona. Entonces
ahora tienen una final privada. Código de cadena. No quiero que este nombre
exacto esté etiquetado en la base de datos, así que me gusta usar letras. O debería ser una buena. Entonces este tipo debería
ser un C. Guy esto se queja porque necesita
un getter ya que gracias umbox solo puede usar umbok dictly y luego
todo x constructor,
y y En absoluto x constructor. Eso debe
satisfacerse de inmediato. Con eso, podemos
cablear fácilmente las cosas aquí. Sí. Entonces ves a estos tipos
en este tipo en. Volveré aquí
en un minuto
estaré de vuelta en un minuto para arreglar esto. Entonces, pensando en
esto, necesitamos una forma. Así que sé que la mayoría de los chicos
probablemente solo querrían usar o he visto a
mucha gente simplemente usar enumerado, ¿ Y esto solo maneja la decadencia. Pero el problema con esto es
cuando usas un enumerado, empieza a usar números, ¿verdad Números, a
partir de cero, uno. Si agregas otra cosa
aquí para recoger dos. Ahora el problema es
que si ahora eliges algo, digamos que agregas otro
objeto aquí, ¿verdad? Añades otra cosa aquí,
llámalo probablemente falló, ¿verdad? Tu número se estropeó. La numeración se estropeó y eso en sí mismo no puede
empezar a causar errores, porque no tienes directo no
estructuraste o probablemente alguien más
escogió el proyecto Por eso estoy a favor de usar esto. Yo siempre tengo
un convertidor tipo. Hola tipo convertidor, y un convertidor de tipo
convertiría a este tipo. Yo lo llamo convertidor de estado. Convertidor de estado. Estamos usando un
convertidor de estado y ese convertidor implementaría convertidor de
atributos. Convertidor de atributos.
Esto va a funcionar. Entonces, en el momento en que lo etiquete en
convertidor en convertidor
auto aplique a través, esto hará la aplicación automática. Ya no necesito agregar
nada aquí. Sólo déjalo como está. Debido a que he implementado esto, una vez que la primavera está escaneando
a través de mi proyecto, ve el estado
el convertidor de estado. Yo solo lo da para ver exactamente cómo en realidad
modelo y digo, así es como
quiere ser increíble, genial. Entonces sabe
exactamente qué hacer. Implementemos esto rápidamente. Sí. Entonces, ¿esto es lo
que estás convirtiendo? Estoy convirtiendo a este tipo
a columna de base de datos. Entonces, ¿qué se deben representar las columnas
de base de datos? Entonces, lo que fácilmente
hago es simplemente hacer una matriz, la cadena, luego solo haré el estado, los valores, luego solo
haré esto, luego solo filtraré. Vamos a filtrar el estado, el estado. Establece igual a status, igual a, llamemos a los estados. Syntus Epose a status. Si estos son iguales,
si estos son iguales, entonces mapeo, luego mapeo el
estado, luego una referencia. Entonces el hallazgo primero encuentra primero o bien
a cómo una excepción. Entonces una excepción, quiero mostrar. Quiero verdad,
lanzar una excepción. Vamos a lanzar un
nuevo argumento legal. Vamos a cambiar esto. Vamos a cambiar
esto más adelante, ¿verdad? Voy a cambiar esto más tarde, ¿
cuándo definiría nuestras excepciones o
excepciones personalizadas o
volvería a cambiar? Estas son excepciones. Todo bien. Entonces por aquí,
¿quiero llamar a esta focha entonces lo
mismo Ahora vamos a ir con la misma
matriz que los valores simplemente no logran masticar también.
Simplemente fallan en masticar Entonces el fuego entonces ahora
estamos comprobando si cada uno de los estados entonces el estado
obtiene el código es igual. Es igual o ir caso de señal, entonces los códigos
son iguales al código. Entonces nos encontramos primero. O de lo contrario mostramos esto puede simplemente el
código no encontrado, ¿verdad? Por lo que no se encuentra
el estado Vida por estado. Entonces, ¿qué hace esto?
Déjame explicarte esto. Entonces, lo que esto hará es, una
vez que persista en un tipo
particular de estatus, en este caso, en este caso, digamos que
elige está presentando un estado abierto, que
es el predeterminado Este convertidor entrará en
marcha, comprobará. ¿Qué intentas convertir del estado
a la base de datos Así que revisa esto, entonces estamos mapeando el código para
que use este código. Este código es exactamente lo
que persisten en la base de datos. Así es como funciona. Código muy
sencillo. Aquí pasa lo mismo. Esta vez cuando se quiere convertir de nuevo el
código en una entidad, convertirlo en la entidad
a verificar, ¿qué tenía? ¿Qué código tienes
en la base de datos? Ya ves, luego escoge la C, luego entra aquí,
parece verificar, ¿
cuál coincide con C? Una vez que coincides con el estado que realmente contiene el código, C, luego lo encuentra, luego lo devuelve. Básicamente, así es como funciona. Esto realmente resuelve ese caso de tener que usar varias formas de en varias formas e intentar persistir en
la base de datos. Esto es lo que más me gusta. De vuelta a esto tan rápidamente
arregla este rápido vistazo aquí, solo roba este código. Sólo ven aquí.
Por favor, no hagas esto. Vamos a copiar y pegar. Ahora tenemos esto. Hemos
podido entonces también
estaríamos explorando. También estaríamos explorando
otro atributo codificado u otra entidad
llamada O inventario. Otro inventario ahora, yo
explicaría por qué voy a estar
teniendo otro inventario. La razón por la
que estaré teniendo inventario es porque si tienes
mucho cuidado de observar, no
he estado usando no
he estado usando esta entidad relaciones
como uno a uno, uno, muchos a muchos
o muchos a uno. Porque si estás construyendo módulos de
resorte,
todos tus módulos
tienen que estar fuertemente
desacoplados y debido a que están desacoplados, el momento en que comienzas a
cablear en entidades, tenerlos juntos como muchos,
muchos a ellos inmediatamente se acoplan apretadamente porque dependen
unos Y ese no es el objetivo aquí. El objetivo es realmente
hacer las cosas sueltas acopladas para que
puedas mover fácilmente un módulo alrededor como desees. Entonces mi otro inventario gestionará
entonces la relación entre el otro
y el inventario. Entonces, básicamente, eso es
lo que solo estamos tratando de imitar lo que hace GPA Y eso es lo que básicamente
quieres hacer en la vida real. Se crea una tabla
para luego manejar aquellos que realmente tienen una
relación entre ellos. Bien. Todo bien. Creo
que eso es lo suficientemente claro. Así que entremos. Yo Schless solo copian esto. Yo sólo voy a copiar esto.
Es lo mismo. No está cambiando.
No está cambiando. Entonces tendré lo mismo en Geta, el mar, en entidad,
a dos cuerdas Dos cuerdas, dos
cuerdas, dos cuerdas. Dos cuerdas. Para
encordar, luego una tabla. Entonces mi tabla tendrá índices. Mis índices tendrán así que quiero tener no sólo
un índice sino índice múltiple. Ahora me pregunto cómo sé que esto sería un múltiplo
que puedo tomar múltiple. Integ da una característica una
vez que lo colocas dentro la ortesis justo al oeste
Control P. Si, Control P o creo que
debería ser el comando P en MAC Entonces ves que el índice es
en realidad toma una matriz. Es una matriz que se necesita, así que puedes tener más de uno. Para que puedas colocar
uno ahí o
colocarte en esta collibrasa
y tener más Entonces lo que tenemos un índice
en índice, luego el nombre, voy a llamar a este otro índice,
ID, IDX, y la
lista de columnas voy a estar apuntando Ahora bien, esto fue
columnista de Libia por una razón. La lista de columnas es la otra ID.
Voy a volver aquí. Veremos cómo
definirlos. Es decir puedes definir si
tienes más de uno, solo usa un valor separado por comas y podrás
tener a los otros chicos Entonces en índice, ¿ese es
el segundo? Ese debería ser el índice MV. Tenemos que leer realmente para el inventario, entonces la lista de
columnas
será el ID de empresa de inventario. Esto funciona. Debe ser un lanzador de
comando separado. Esto se ve bien.
Esto se ve bien. El privado largo o ID, este debería ser un largo,
no largo, ¿verdad? Tener una identificación larga, luego una identificación
privada de larga aventura. Gracias, primavera
o Inteligente. Después privado en cantidad. Creo que a esto le llamo CANTIDAD.
La cantidad es simplemente demasiado larga. Entonces privateong Privado largo, quiero llamar a esta
cantidad total cantidad precio No sé si esto se
desarrollaría. Mirándolo de nuevo. Otra identificación en un largo bien, verifique esto definitivamente puede ayudar. Bien, está bien. Está bien.
Bien, procedamos. Vamos a proceder. De hecho volveríamos
ahora mismo definimos esto. Creo que solo necesitamos
definir rápidamente repositores para
reflejar realmente lo que estamos tratando de hacer Entonces creo que este video se está
haciendo demasiado largo, ¿verdad? Se está haciendo demasiado tiempo, así que
necesito terminar esto rápidamente, envuelva esto rápidamente. Definamos rápidamente
nuestro repositorio. Yo sólo voy a entrar
aquí, o repositorio. Yo solo lo llamaré un
repositorio una interfaz. Entonces en realidad se
extiende el largo aquí, esto funciona como repost, entonces lo único que necesito es justo pero esto
no es lo que necesito Quiero encontrar otro identificador.
Esto es lo que necesito. Entonces esto es lo que necesito. Yo
sólo quiero el identificador. Debería ser una cuerda, feliz. Llámalo otro identificador. Esto básicamente lo que necesito aquí. Entonces, si
revisas el
otro inventario, otro inventario será bastante único porque estarás
escribiendo una consulta nativa. Llame a este repositorio de inventario. Otro inventario positorio
luego un repositorio. Entonces tenemos lo que
quiero lograr es que quiero tener un monto de
ID de pedido, o cantidad de identificación. Entonces la consulta
tiene sentido Libelo D eso. Después pasamos en el ID de pedido. Entonces un ID de pedido en particular, quiero todo el monto, ¿
verdad? El ID de orden particular. Quiero todos los montos que es, ya
sabes, tienes un inventario, has realizado ese
pedido bajo puede contener una lista de inventarios Entonces todos los montos, como todos los montos
de inventario, sumando
todo junto. El inventario puede ser
para inventario A puede tener dos puedes tener dos
para evento B puede tener tres, 53, cuatro, puedes tener seis, toda la combinación
hecha juntos, quiero todo aqui. Por eso estaré
escribiendo la consulta. Eso va a ser una consulta.
Simplemente cae en nativo. Vamos a caer en nativo, consulta true, luego el valor. El valor será
seleccionar suma, luego inventario,
ya que obtendrá de los puntos de inventario. El total recuerdo definimos esto
definimos esta área. El precio de cantidad, así es como debe ser debe
ser etiquetado en la base de datos. Subrayar el precio luego del inventario Inventario Underscoe. Creo que solo déjame hacer esto OI está bien entonces para que no
tengamos que repetir así solo coloca esto aquí OI y eso funciona o el inventario así
que ten eso donde el otro ID. Solo puedes decir Oi
ID igual a esto, que es un valor facial que se puede
usar que es un valor de fase. Tenemos eso.Esta sea interfaz y se
extiende para extender la multitud No, no creo que
necesite el GPA completo. Ahora, sé que alguien
podría estar preguntando, ¿por qué usas
multitudes o no GPA Con toda la
funcionalidad que necesito, tomemos por ejemplo, volvamos a esto. Mira todo lo que necesito aquí.
Esto es justo lo que necesito, que está disponible
dentro de la multitud. Ahora bien, si estás trayendo GPA, estás trayendo
demasiadas cosas Mira este GPA repost tres. Si haces clic en esto, ya
ves, traes todo esto. No necesito todo
esto, trae uno,
dos, tres, cuatro,
cinco, seis, siete,
ocho, nueve, diez, 11, 12, estás trayendo a 12 otros 12
tipos que están disponibles. Y esto también contiene
lo que tenemos en el código. Ves que esto contiene el
código al menos código. Nosotros básicamente todo lo que
necesito es el cordón. El código solo trae
las cosas básicas, así que esto está bien. Porque lo que estás trayendo
si estás trayendo JP, P traerá todo
dentro de sí mismo y además, todo estará
listado junto, así que no necesitas todo eso. Por eso me apago
al código depositario. Creo que ya terminamos con esto. ¿Por qué se queja este tipo? Porque no entré en dialet. Cambiemos el dialecto a post crisis. ¿Lo hacemos feliz? ¿Por qué no feliz? Porque no estoy conectado a la base de datos.
Sólo déjalo. Esto funciona. Seleccione el otro inventario, precio de
cantidad de este, luego donde se
prueba el ID . Eso es
básicamente lo que necesito. Por eso soy capaz de hacer eso. Bien. Creo que esto se está
haciendo bastante largo. Esto se está haciendo bastante largo. Lo voy a romper
aquí y solo
continuaremos en el siguiente
video. Gracias.
9. Definición de entidad 2: Todo bien. Gracias
por volver a mí. Tenemos que
avanzar muy rápido porque creo que el último
video fue bastante largo. Yo era bastante largo,
y como resultado, pero necesitábamos tocar
algunas de las cosas clave a medida que
avanzábamos en el
camino porque sé podría estar usando
algunos conceptos que tal vez
podrían ser relativamente nuevos para algunas personas y solo necesitaba explicar
un poco rápidamente
para que el set de la película se
pueda hacer personalmente. Todo bien. Entonces el siguiente modelo que necesitamos es el modelo de pago. Así que estar necesitando el modelo de
pagos, que es el paquete de pago. Creo que
entiendes ese concepto ahora, así que paquete de pago. Entonces, ¿cómo
funciona eso de inmediato? Entonces lo que hacemos son
los mismos conceptos. Vamos a crear nuestra entidad. Uh, ¿qué fue esto? Bien. Vamos a crear nuestra
entidad llamada pagos. Así que llama a estos pagos,
y como siempre, enviaré esto a este tipo, así que no solo
eliges a estos tipos. Sí. Entonces, el pago
no es una palabra clave de reserva, así que solo puedo eliminar esta. Simplemente elimino esto por completo. No necesito esto del todo. Esto simplemente debería estar
bien. Todo bien. Despejen mis insumos. Entonces
al mismo tiempo, sólo
voy a resumir todavía esto porque todo
va a ser igual. Todo bien. Genial. Eso lo tenemos. Entonces
definamos rápidamente los otros campos. String o ID IDO
serán necesarios aquí porque eso es básicamente lo que solía ser la otra tabla. Entonces tenemos la cantidad
privada larga. Recuerda, nos estamos apegando
a los montos, luego a la marca de tiempo
privada privada. tiempo privada, marca de tiempo
Java SQ, llamémoslo fechas de pago Yo sólo me estoy apegando
a lo mismo. Puedes usar las fechas de botín, solo
me estoy apegando a la marca de tiempo , la marca tiempo desde entonces instante ahora Entonces tenemos el estado de pago
privado este es otro um con el que
estamos trabajando. El estado del hombre, necesitamos saber. Ahora, o podría estar terminado, pero el pago no
está terminado, podría haber intentado
lo siento, el otro podría estar abierto, el pago no
se completa. Pero el pago está terminado, el
tuyo está terminado. Creo
que entendemos ese concepto, eso es lo que estoy tratando de
sacar aquí. Usemos esto y usamos un estado de pago que está
incompleto para ser la base. Entonces una vez que esté terminado,
hazlo completo. Hola crea nuestro estado de pago. Sabemos cómo va,
esta misma cosa. Simplemente creamos nuestro tipo lo
estoy restringiendo también al módulo o paquete ahora como
entendemos que es Yo sólo voy a hacer esto.
Crea las obras InNumT Voy a necesitar a Geta y
al constructor laxa. Geta, no constructor laxa, por qué no necesitábamos Bien, ve a
reunir insumos. Entonces queremos incompleto. Incompleto,
coloco esto en datos con I. He ampliado esta
área conceptual, luego terminado. C, y también tengo 1 mole. C, entonces puede llenar. Tan lleno. Pero el
af. Todo bien. Entonces al parecer, necesitamos definir el código
que estás usando. Quiero llamarlo código. Alr así que debería ser definitivo, lo sé No cambiando. Todo bien. Entonces este tipo
estará feliz ahora. Una vez que lo traigas.
Este tipo es feliz. Definamos el convertidor. Le expliqué el aria
por qué uso un convertidor. El motivo es porque una vez más, impide
que se analicen algunos de los temas que enumeraron realmente
causas Así que tenga convertidor de
estado de pago. Simplemente puedes colocar ambos en
el mismo paquete, ¿verdad? Ese es el tipo y
el tipo convertidor. Sólo me gusta separar las cosas. A veces podríamos tener proyectos en los que podrías
tener se tipos están usando dentro del modelo que
solo pueden expandirse así que quieres
mantener el tipo en alguna parte, mantener el convertidor
en alguna parte, ¿verdad? Eso es lo que estoy
tratando de lograr aquí. Entonces como sabemos,
estaremos implementando ahora,
implementando el convertidor de
atributos. No sé por qué este
tipo compró a este tipo. Convertidor de atributo de atributo, luego
cadena de estado de pago luego convierte, luego convierte y luego
convertidor para aplicar true. Este tipo quiere la implementación,
nosotros implementamos eso. Entonces básicamente entonces entonces uh esto entonces podemos simplemente básicamente verificar ¿qué estamos regresando? Podríamos mirar a través, para ver qué estamos convirtiendo a columna de base de datos,
qué está entrando. Antes de ahora, creo que acabo de llegar. Creo que hice un OverQuurather que pasar por todo esto, básicamente
podría haber dicho
yo, dejémoslo en
realidad no arruina Solo digo que
hubo un overque que podría haber dicho simplemente
si puedo dar la vuelta si en lugar de pasar por
ese estado de código largo S si las estadísticas son nulas. No hay, entonces una nueva
excepción de argumento ilegal, sis no encontrada. Va a ser nulo,
entonces solo siéntate ese código. Y solo código. Esto
va a funcionar, ¿verdad? Sólo voy a asegurar porque
al parecer esto está disponible. Si no es nulo,
es decir, existe y si existe, solo
obtenemos el código.
Eso sólo va a ser directo. Pero para esto, para que luego
podamos venir aquí. Llamemos a este código. Entonces
esto es si el código, gracias. Gracias son para completar. Entonces esto funciona entonces aquí, luego a mis matrices, el stream, luego
mi estado de pago, los valores, luego filtrar. Si el estado estado obtener código
que es igual ignora bueno. Entonces si encontramos que
giramos el primero otro nosotros una excepción else. Una excepción. Entonces ahora mismo, no
es que realmente sepamos que tal vez no solo hagamos
referencia de referencia así que no necesitamos esto. Sí. Muy bien, cambiaremos esta excepción
más adelante una vez que
introduzcas nuestra excepción porque
nuestra excepción
sería usar modelos conceptuales
Cardpo, ¿verdad Vamos a seguir adelante, ¿
verdad? Eso probablemente ya sea
dejar el corte de la
bolsa. Todo bien. Entonces creo que tenemos lo que necesitamos, necesitamos el repost, que
sería una interfaz Entonces lo llamaremos
pagos, pos tres. Entonces extenderá el código. Entonces como repositorios tres. Interesante. Todo bien.
Entonces, ¿qué necesitamos? Creo que solo necesitas
encontrar por Bien. Solo necesitas encontrar
celeste opcional. Ahora mismo, solo para descubrir
que estamos usando pagos GG. Por ID de pedido. ID de pedido. Encuentra pago por pedido, IT. No no no ordenar por. Ahora bien, esto es por ID de pedido. Sí, a eso me refiero. El ID de pedido es una cadena. O idea. Bien, entonces
creo que eso es básico Vamos a correr rápidamente
a través de nuestro repostre. Sí, vamos a repasar por
este otro tipo. Bien, bien por oh, lo siento, G.
Quiero ser consistente. Lo siento, creo que es descuido, solo
que sean consistentes. Repost usando gets,
este increíble consigue. Eventualmente. Oh, sí,
me falta conseguir. Es increíble.
Impresionante. Entonces estas son básicamente las entidades
van a estar trabajando con nosotros este servidor Ant lo coloqué en mi nuevo stub
y acaba de comprarlo Estos son básicamente con lo
que vamos a estar trabajando y este debería ser el núcleo. El siguiente paso es
crear un problema. Vamos a conseguir un problema.
Vamos a traerlo. El tema se supone que debemos
mapear esto de nuevo. Yo sólo lo llamaré entidades. Yo solo lo llamaré entidades
Bs porque
habrá otras entidades, entidades
Bz, entidades Bs
o entidades preliminares
o deberían dejar de fumar Bien, Besentit está bien.
Nosotros igual que esto aquí. Entonces solo copiaré esto,
luego volveremos. Entonces solo comete esto en
contra de esto. Todo bien. Commits. Entonces esto
entonces simplemente se cierra. Todo bien. Bien, no hay problemas, no hay puesto secreto, luego recibe empujón Bien, entonces
veamos que funciona. Interesante. Bien. Así que sí, así que hemos sido
capaces de lograr eso. Hemos podido crear
todas las entidades que necesitamos. Creo que podemos escoger
del siguiente video para explicar o pasar por
la siguiente fase. Gracias.
10. Limita el nivel de acceso a la repositry: Todo bien. Gracias por
volver conmigo, esta es Z aquí otra vez. Todo bien. Entonces lo que vamos a estar haciendo en
este segmento o en este video es que ahora necesitaríamos comenzar
a limitar el modificador
de acceso de nuestras interfaces. No queremos porque sabemos que
vamos a estar obteniendo cosas
de la base de datos, no
queremos que las cosas empiecen
a funcionar. No quiero que este módulo esté
al tanto de lo que
está pasando aquí. No quiero que este modelo esté
al tanto de lo que está
pasando aquí. Entonces lo que haría,
es una muy rápida. Entonces me quito esto que es
la esencia del modulith. Nos aseguramos que nadie sepa exactamente
lo que está pasando aquí. Por lo que en realidad le hacemos cumplir que
no tenga acceso a esto. Si se trata de la otra
posidad, me quito esto. Ven al
postulado de inventario, me mando a distancia esto. Todo bien. Todo bien. Aquí va
a pasar lo mismo. Yo me quitaría esto, ¿verdad? Porque al final
del día
no deberías llamar a la interfaz
desde otro lugar. Si necesitas algún servicio, probablemente
quieras
crear un servicio, luego cablear el servicio aquí. Pero básicamente, ese
sería otro concepto del que
hablar pronto, ¿verdad? Ahora vamos a tener algo
llamado interfaces nombradas de algo que queremos exponer
de un módulo a otro. Pero solo ten en cuenta en el momento en que empiezas a tener
esa una tras otra, empezaste a introducir un
poco de acoplamiento. Pero si hay que evitarlo, si puedes evitarlo, evita lo más posible. Pero ves en ese
escenario, es algo que es
muy necesario. Entonces yo un video muy rápido solo para mostrar que vamos a
empezar a limitar las cosas, y como pueden ver, nuestro repositr ya no
está disponible Entonces, para crear un maniquí, vamos a crear
un servicio ficticio Vamos a crear un servicio ficticio y lo
llamaré orden no
comprometería esto No voy a cometer
esto porque
volveremos a hacer
propiedad y más tarde. Voy a llamar a esto O servicio. Yo no comprometería esto ahora. Asumamos que es un
servicio o un componente, cualquiera que sea un controlador Ahora trato de traer en una privada la final privada Inventure Procedimiento de inventario. ¿Ves? No lo encuentras procedimiento. Una pose. Todo bien. ¿Ves? Esto no se encuentra.
¿Y qué dice? Este tipo venture no es público en este tipo en particular
no se me puede acceder
desde el paquete lateral. Eso es exactamente lo que
estaba tratando de lograr. Voy a quitar esto rápidamente.
Simplemente rápidamente quiero demostrar que ya
no va a ser accesible, y creo que ya está. Entonces podemos contin
a partir del siguiente video. Empieza a limitar
las cosas y mostrar que cada módulo está restringido tanto
como sea posible antes de que ahora empecemos a
profundizar para ver cómo exponemos las cosas y cómo luego
comenzarán a
hablar entre ellos.
Todo bien. Gracias.
11. Prepoblar el inventario: Bien, chicos, gracias por
volver conmigo. Todo bien. Entonces, ¿qué estará
haciendo a partir de aquí, haciendo algunas implementaciones centrales En primer lugar, creo que
menos cable esto en levantarse para que no lo
dejemos expuesto. Así que voy a igual lo
que he hecho antes. Voy a escoger el
mensaje del comité que ya
tengo abierto
en mi otra pantalla. Entonces luego cerrar cerrar entonces ese es un cuatro.
Eso es un cuatro, sí. Entonces lo encuentras ahí en ITu postu que
voy a compartir, luego me sale push. Todo bien. Bien, entonces tenemos eso. Ahora lo siguiente
con lo que
estaremos tratando o estaremos trabajando en
el escenario mirando es que probablemente
tengamos que estén
mirando una tienda o
probablemente un servicio en línea que tenga un inventario en el que los clientes puedan comprar y una vez que
realmente lo compren, inmediatamente pueden hacer otro e intentar
reemplazar el pago. Por lo que el inventario
debería existir. Entonces eso es exactamente lo que
queremos hacer aquí. Queremos realmente
pre-poblar el inventario, queremos poblar
el Déjame cambiar algunas
cosas alrededor de los bits. Vamos a introducir el perfil. Vamos a introducir un perfil. El perfil está activo. Solo vamos a dev porque no me gusta trabajar en D Bs directamente. No tiene ninguna implicación. Simplemente siento que ayuda a gente a entender más
concepto sobre espolvorear. Por eso
presento deliberadamente estas cosas. No es como si hiciera
algo especial. Digo que cuando estás
en entorno dev, tengo un dev donde repro, puedes tener producto, fraude,
puedes tener fraude, basado en
las propiedades que definiste, puedes tener
configuración separada o valores o valores de la configuración para
el para producción, así puedo entonces cablear las cosas Eso es que probablemente también cosas que
quieras mantener en las
propiedades de la aplicación. De lo contrario, probablemente manteniendo la
base de datos, la conectamos. O usa alguna forma de propiedades de
configuración para mapear cosas desde las propiedades de su
aplicación. Entonces, cualquiera que funcione la primavera es tan dinámico, puedes
hacer varias cosas Asiento puedes hacer algo de varias
maneras, ¿
verdad? Bien,
así que vamos a esto. Ninguno de los lugares es profundidad, entonces es profundidad, eso va a
estar corriendo. Todo bien. Así que vamos a introducir
algunas pocas propiedades. Introducir algunas propiedades. ¿Entonces copié esto?
Sí. Entonces copio esto para que pueda simplemente
mover todo aquí. Entonces quiero un resorte,
primavera JPA, luego hibernar,
amarillo Ahora, ya ves que esto es único. Ahora, estoy poniendo actualizaciones aquí. Esto básicamente pasaría por mi entis y
los presionaría en la base de datos, con
lo que está bastante
familiarizado Entonces si para tener un prod, si estoy usando pro
debería ser conocido. Eso se sabe o se elimina
por completo, Porque
no debe actualizarse. Lo que probablemente quieras hacer
es una vez a pesar de que esto
se ha trabajado ha sido probado
en la prueba enroma UAT, luego escribes el
guión,
copias el guión,
tomas el guión y
ve y coloca dártelo a tu el guión
y lo entregas
a tu equipo de DBA
y el equipo de DBA
ejecuta tu guión y la
aplicación de primavera puede a tu equipo de DBA
y el equipo de DBA
ejecuta tu guión y la aplicación de primavera aplicación Esa es la situación ideal. Así es como corres o
entras en producción. No usas objetos
en producción porque este tipo puede arruinar mucho
las cosas. Uno de mis superiores con los que he trabajado mientras en realidad
trabajaba en alguna compañía ha
dirigido esto antes, y de hecho, es
solo un caso de clic He tenido a alguien
que usó guiones antes y estoy seguro de que
sabes lo que esto haría. Esto destruiría el
esquema. Estaba desordenado. Estaba muy desordenado. Yo sólo
quería colocarlo ahí algunas cosas
separando. Ahora estar ejecutando un guión. Y el script es así que
usa SQL en modo knit. Entonces esto simplemente inicializa
tu modo de punto de script. Se quiere colocarlo
siempre por primera vez. Entonces otras veces nos lo
quitamos, lo colocamos como nunca, ¿
verdad? ¿Qué más? Creo que esto debería ser.
Después para traer el guión. Entonces esto es voy a poner
todos los disponibles. Todo esto estará disponible
en la sección de recursos. De hecho voy a
etiquetar eso para que
podamos realmente tener acceso a él. Entonces SQ Todo bien. Entonces voy a estar cargando
el inventario. Este es el inventario.
Este inventario. Recuerda lo que tenemos en nuestro
inventario si solo coloco esto lado a lado. Lo
coloco uno al lado del otro. Ves esto la descripción, el nombre, la
descripción, el precio. El otro aquí no importa. Yo sólo pego esto, ¿verdad? Entonces así es exactamente
como se ve. Entonces yo solo insertando
algunos datos en él. Eso es básicamente. Así que bien. Veamos cómo funciona
esto. Creo que soy sup. Debido a que estoy ejecutando los guiones, esto podría querer
reproducirse de inmediato. Se supone que debo diferir la
inicialización. Lo que eso significa es que debo permitir que las tablas se
creen antes que nada,
antes de que intente evaluar
o ejecutar los scripts. Esto también es muy importante. Definamos la inicialización,
pongámosla en true. Esto permitirá crear las tablas
, mostrar, todo está bien
antes de que luego
intente ejecutar los scripts. ¿Mi base de datos está arriba? Sí,
debería aparecer porque tengo mi docker abierto y una vez que ejecuto
la aplicación, recuerda que discutimos docker componer para entrar
y sacarlo a Todo bien. Entonces puedes ir por esa ruta, pero voy
a sumar si no quiero una vez que bajemos esto, todavía
quiero
observar los datos. Entonces vamos al
archivo de redacción de
Docker y vamos a sacar esto a colación. Así que déjame sacar
esto a colación. Entonces, una vez que realmente ejecutas la
aplicación o la derribas, no
tenemos un caso el
que se acerque, está bajando. No, no, eso no sucedería
físicamente. La dejo se quedó levantada una vez que
en realidad la manejas desde aquí. Todo bien. Pero, sí. Creo que también quiero mencionar
para aquellos que no usan
Intelligltimate, por favor, puedes usar cualquier otro cliente que tengas acceso para realmente
hacer Puedes usar PG admin, ¿verdad? Esto es simplemente conveniente
porque todo está en un solo lugar y no me gustaría traerte demasiadas
herramientas a la pantalla. Así que estoy intentando en lo
posible limitar el número
de herramientas que estoy usando. Es por eso que estoy usando
todas las características que Intellig muestra
todo bien desde la
redacción de Docker que vi el servicio Docker al
que realmente puedo tener acceso aquí
para ver los registros, que usamos en debuggin sección
anterior cuando
realmente enfrentamos un error,
uh en la función de base de datos, que realmente tenemos la función de base que Intellig muestra
todo bien
desde la
redacción de Docker que vi
el servicio Docker al
que realmente puedo
tener acceso aquí
para ver los registros,
que usamos en debuggin sección
anterior cuando
realmente enfrentamos un error,
uh en la función de base de datos, que realmente tenemos aquí. No soy la función de base de datos. Probablemente no lo persistiera. Sigamos adelante y hagamos eso porque aquí hay una función de
base de datos. No lo mencioné. Hay
una función de base de datos. Llamemos a esto modular
cosa esta MLF modulit court. Simplemente puede agregar la función
de base de datos. Sí, es mi anfitrión local. El usuario, este es el usuario aquí. El usuario es ModulitPars es Modults. Entonces ya sé lo que es. Módulo Modult Teniente Sí, mi base de datos es lo que brota en
esa commo primavera
en esos commodls Bien, entonces esto funciona.
Así que vamos a probarlo. Vamos a probarlo. Está conectado. A ver. Impresionante. Entonces
esto conecta correctamente. Así que vamos a aplicar
entonces bien. Todo bien. Tenemos módulos parece que
no hay mesa en él en este momento. Es por eso que luego ejecutamos esto. Vamos a ejecutar esto. Espero que esto se conecte a
mi tabla de inventario. Ahora no deberíamos ver ningún RFC, en realidad
resve vamos a Ya ves, recogí mi perfil Recoge mi perfil aquí,
cual es Dev, ¿verdad? El perfil notado es dev. Comenzó con éxito. Entonces vamos a refrescar esto. Guau. Tenemos mesas. JP ha entrado con la
entidad para dejar algunas de las secuencias que en realidad
agregamos. Esto le interesa. Esta
interesada. Cosas buenas. Cosas buenas.
Cosas buenas. Todo bien. Cosas buenas. Se agregan secuencias, acuerdan o se equiparan. Las secuencias para cada una
de las tablas para ejecutar. Eso es lo que hace la identidad, que es este tipo, su identidad. Colocar automáticamente una secuencia
y que va a estar usando. Podrías estar preguntando, ¿por qué
no usas secuencia? Recomiendo encarecidamente usar
secuencia. Hay una secuencia. El tipo de secuencia,
fuertemente comunión a secuencia que la utilizas
para la base de datos Oracle, ¿verdad? Base de datos Oracle,
no use identidad. Fuerte puedes leerlo. Te aconsejo encarecidamente que uses la secuencia y no uses Auto. Auto no está bien, ¿
verdad? No use Auto. Para la identidad, la identidad funciona
para prácticamente todas las bases de datos, pero todas las bases de datos relacionales, usemos todas las bases de datos
relacionales Pero para Oracle,
por favor use la secuencia. Todo bien. Entonces creo que
no tuvimos ningún error. Así que vamos a revisar el inventario. Impresionante. Entonces esto
fue prepoblado Esto fue pre poblado. Esto lo hemos logrado con éxito. Hemos podido
llenar previamente los datos, hemos creado las tablas Entonces, ¿qué es la publicación de eventos? ¿De nosotros vino este tipo? Llegaremos a eso en un poco,
llegamos a eso en un poco. Explique dónde llega a ser
realmente la publicación de eventos .
Pero volvamos. Vemos esto entrando.
Vemos esto saliendo. Vemos la base de datos. Entonces ahora quiero
cambiar esto a nunca porque ya no estamos haciendo
nada desde aquí. Si conseguimos el camino lo
necesitamos solo
conectamos esto también, ¿
verdad? Alambre esto también. Como si estuviéramos en modo de prueba,
así que podemos romper ins, podemos traer esto en persianas
realmente funcionan correctamente. Bien. Entonces un breve breve sobre
qué es la publicación del evento. Ahora, si va a través de
la documentación en el módulo de resorte, se supone que
los
módulos se comunican típicamente entre sí con eventos y los eventos pueden fallar. Los eventos pueden fallar. Cuando fallan, módulo de
resorte te ayuda a guardar
tu evento en esta mesa Al guardar esta tabla,
puedes volver a esta tabla, así que inicializamos o enviamos probablemente tuviste un
servicio fallido o por alguna razón quieres corregir el error o
tal vez el servicio que se suponía que iba a estar arriba
está abajo ya está arriba, puedes reintentar esto
realmente pasará Hay otra
propiedad que se usa, pero creo que solo estoy
saltando el arma aquí, perdón hay
otra propiedad aquí El inmueble se llama mood LiF. Es, no, no, es Mod Lif. Creo que publicamos, publicamos
evento destacado y empezamos. Creo que esto
básicamente debería usarse para el modo de
prueba porque puedes estar iniciando cosas en
producción, ¿verdad? No, o tal vez cuando solo
estás desplegando. Así que siempre querría
poner esto en falso, ¿verdad? Sólo que siempre quiero
poner esto en falso. Entonces esto
ni siquiera debería suceder en absoluto. Esto no debería suceder. Entonces ya ves, el valor predeterminado es verdadero. Lo sentimos, el valor predeterminado
es falso. Entonces el significado realmente no
importa si me dit in. Realmente no
importa si agrego, así que puedo simplemente
moverlo todo junto. Yo sólo quiero mostrar esto.
Llegaremos a eventos. Llegaremos a los eventos, ¿
verdad? Porque ese es el modelo de transferencia central o el modo de comunicación
entre los modelos, ¿verdad? Pero por ahora, vamos
a mirarlo desde el lado positivo. Hemos podido
crear nuestras tablas, y
y somos capaces de
inicializar y podemos ver nuestros datos, que mostré un poco
debajo creo que eso funciona Nosotros para poblar nuestra verdura. Todo bien. Gracias, chicos.
Nos vemos en el siguiente video.
12. Prueba de integración 1: Bien, chicos,
muchas gracias por volver
conmigo. Todo bien. Entonces antes de continuar, vamos a simplemente rápidamente vamos a agregar
rápidamente este Github. Acabo de poblar inventario. Entonces voy a cerrar el
número cinco, ¿verdad? Entonces empujo y
eso será como referencia. Así que solo toma esto paso a paso. Ahora bien, lo que quiero hacer en este video en particular es comenzar
a
configurar las pruebas base. La prueba base estaría necesitando o requiriendo que la prueba base
estaría necesitando o requiriendo
para los modelos, necesitamos realmente
de la prueba base. Entonces con eso en mente, vamos a entrar aquí, inventario, At Enter o como quieras de
cualquier manera que sepas yo uso tenter y para sacar a colación a este tipo Entonces no quiero
ninguno de los métodos. Yo sólo quiero hacer esto. Después configurarlo en prueba. Entonces previo a la prueba. Si haces esto,
es, la prueba. Ahora que tenemos el inventario, creo que quiero
etiquetarlo inventario, llamémoslo
prueba de integración porque hace más de eso. Solo refractor con nombre
para integración de inventario. Pruebas de integración. Un par de personas me han preguntado personalmente qué diferencia hay
entre la prueba unitaria, prueba
funcional
y la integración. Esos son los tres
que tenemos, ¿verdad? Estas son las llamadas
co que tenemos. prueba unitaria es la unidad más pequeña, el componente más pequeño de las pruebas que
realmente puedes realizar. Tomemos por ejemplo,
si vas a estar probando este repositorio de
inventario, la prueba de cada parte. Si tienes varios métodos, estás probando cada uno de
ahora, va más allá de eso. Si escribiste un
método o una lógica, escribiste un método, una lógica, el has y IL o texto num. Hay que probar cada um
casos. Eso es prueba unitaria. Va a la misma lista, maneja todos los escenarios de casos de uso. Eso es prueba unitaria. Pruebas funcionales en sí, prueba
funcional va un
poco más alto que eso. Las pruebas unitarias son relativamente
muy rápidas como las más rápidas, pero las pruebas funcionales
son más lentas que unitarias porque prueba
funcional de la palabra no
significa que pruebes funciones. Creo que la gente
confunde mucho esto. Piensan que la
prueba funcional significa que estás probando funciones,
lo cual no es cierto. Prueba funcional, en realidad,
lo que hace es prueba funcional es. Puedes tener estoy seguro de que
sabes que podrías escribir un método en particular. Estás tratando de
lograr algo en un método en
particular y
dividirlo en varias funciones,
o varios métodos. Entonces puedes llamar a
prueba funcional testing una función, no. Más bien, tienes un componente
particular en el sistema que estás
tratando de probar para ver si
funciona como debería, ¿verdad? Que los componentes pueden atravesar varias líneas de código que
están en diferentes funciones. Probarlos juntos para
que tengas pruebas funcionales. Luego rápidamente
prueba de integración y de extremo a extremo. Lo golpeas desde tu controlador. Desde su controlador, va a su servicio desde un
servidor va a la base de datos. Si tiene algunos
servicios terceros
llamados servicios de terceros, todo regresa
al controlador. Entonces una prueba de extremo a extremo
es un servicio de riesgo. Espero que quede claro. Todo bien. Entonces, para pruebas de integración o para
pruebas en modulados de espín, Spin Modules
introduce una asignación llamada pruebas de modelo de aplicación Prueba de módulo de aplicación. Prueba de módulo de aplicación, que es una prueba de modo de
aplicación de arte. Por lo que introducen esto. Entonces esto por defecto,
comprobará porque esto fue
creado a partir de este paquete. Miraría hacia arriba para ver este paquete y asegurarse de
que esto no rompa el resorte modula el flujo o
las reglas que se han establecido y asegurarse de que
no se están inyectando cosas en las que
no se deben inyectar Si lo haces, fallará. Creo que un
ejemplo práctico será lo que sea. Entonces pongamos aquí
algo para que
se ejecute un escenario. Entonces solo
lo llamaré el verificador. Evitemos el módulo de verificación. Módulo, ¿verdad? Todo bien. Entonces con esto en mente, vamos a darle a esto y
veamos qué pasa. Entonces empezamos a entender
el concepto. Bien, entonces tenemos esto corriendo corriendo,
corriendo corriendo. Esto falló, ¿por qué falló? Puedo decir una serie de
razones por las que creo que
debería haber fallado, dice Context loader no
está disponible. Bajemos. Fuente de datos. Esta es una
razón importante por la que falla. Recuerden que estamos cableados
en la fuente de datos aquí y como hemos
cableado en la fuente de datos, que es de la composición de
Docker, este tipo no lo sabe Este tipo no sabe nada. Lo que necesitamos para hacer la prueba
no sabe sobre la composición de Docker
que has configurado Lo que necesitamos para hacer
una serie de cosas. Una serie de cosas que
realmente necesitamos para conseguir esto en su lugar. En primer lugar,
vayamos a la dependencia. Yendo a la dependencia,
Docker compone. Comprobemos nuestra composición Docker. Ahora bien, esto es exacto, ¿verdad? Esto es exacto
porque este alcance también
tomaría en constreñación si vas
por tiempo de ejecución, ¿verdad Pero lo siguiente, así que debes asegurarte de
que esto es en realidad un tiempo de ejecución porque recuerda que primavera recuerda que M vn
tiene varios alcances Algunos se limitan a probar, ¿verdad? Entonces estoy diciendo que el tiempo de ejecución
debería ser lo que usas, entonces las pruebas también
inhibirían de esto, ¿verdad? Primer bit. Luego, a continuación, vamos a crear nuestro archivo. Vamos a crear un
forul de recursos así crea un salsas da. Llamemos a esto salsas. Creo que eso debería ser
directamente sobre la jala jala. Con salsas. ¿Qué hago otra vez?
No, no lo es. L acaba de tomar esta
estructura de nuevo. A veces me
confundo con esto. Todo bien. Bien, O principal, ¿verdad? Entonces este Java, estas pruebas. Entonces salsa principal, debería estar debajo de este tipo debajo de este tipo. Entonces, ¿cómo se llama? Dietética ¿Dietética? Salsas, increíbles. Impresionante. Gracias. Gracias.
Bien, tenemos eso. Entonces dentro de él,
vamos a crear una aplicación especial
Yermo file que
sería utilizada por nuestro contexto de prueba Esto se puede hacer
de varias maneras. Probablemente escriba
un archivo de propiedades, luego use una
fuente de propiedad de prueba para cargarlo realmente. Eso también funciona. Esto
es sólo otra salida. Entonces solo estoy usando un estilo
particular aquí. Por lo tanto, tenga en cuenta que puede usar varios estilos para que
esto funcione correctamente. Yo uso aplicación o Yarmo. Mamá usa la prueba de aplicación allí, pero si usa la aplicación
nip en la prueba
ahora puede iniciar las propiedades de
la aplicación, una fuente de propiedad de prueba para que
pueda cablear en ese archivo. Pero esto debería ser auto cargado. Ahora bien, le digo esto a la gente tanto
como sea posible, si estás usando botes de primavera, apégate a la configuración automática. En el momento en que intentas cambiar la configuración base, o debería hacerlo por dos
razones. ¿Debo decir uno? Si tienes una necesidad especial que la
configuración automática del resorte no está manejando, pero siempre trata de saber
cómo romper cosas. Número. Sin embargo, si
ese no es el caso, por favor use la base, use
la configuración automática. Deja de agregar propiedades que creas y quieres que
se haga de una manera especial. Lo que estás haciendo
es que estás rompiendo el flujo de configuración automática y eso podría llevar a que si no estás realmente
familiarizado con el swing, comienzas a crear
errores necesarios que podrían llevarte horas o días depurar solo porque no usaste
la configuración automática. Sepa que hay una
clara diferencia en botas de
primavera y primavera, ¿verdad? Si no es primavera,
tienes que
cablearlo algo así que si las botas de primavera, estas son auto cableadas
para ti, ¿verdad? Así que por favor tenlo en cuenta. Bien. Entonces para esto, ya
tendría
este beel laico en alguna parte, así que sólo voy a caminar por ahí para que no lo haga no me inclino ni
dulce un de diezmos Entonces esto es lo que usamos. Recuerdo datos esto es primavera
primavera eso es módulo él. Ahora bien, no es un buen caso para empezar a exponer tu contraseña, incluso en el gato de prueba
porque esto va a entrar en el weapositore, Esta prueba va así que no
quieres romper las cosas ¿Cómo manejas
esto? Todo bien. La buena noticia es que cuando estás usando Intelligen por favor, no
estoy vendiendo de ninguna manera Sé que he estado mencionando
muchas cosas sobre intelligen pero aquí no estoy
vendiendo intelligen Solo digo que intelligen es una herramienta bastante
buena, Lo que puedo hacer es ir al centro comercial más y luego
ejecutar
la configuración. Entonces en esta parte aquí, todos los módulos en módulo de
resorte costo, entonces quiero establecer alguna variable de
entorno. Quiero establecer una variable de
entorno. Primero uno es más dolt, luego subrayar el nombre de usuario, luego esto debe establecerse en Módulo luego subrayar el nombre de usuario,
luego esto debe establecerse en Módulo.
Ese soy yo. Módulo. Entonces ya ves, puedo cambiarlo de esta manera. Después el otro
más dual lif. Lo siento. Nombre de usuario. Sin usuario Bin. Nombre de usuario. Este
subrayado PASSW también modulf Significa los
medios de configuración en ese sistema. Nadie en la acción de caminar sabe exactamente lo que está sucediendo. Te doy una posición, quiero decir sabe exactamente
lo que está pasando. Una vez que realmente
guardes esto Bien, así que hemos agregado esto en. Creo que dijo. Vamos a ejecutar esto de nuevo. Si agregué esto correctamente,
esto debería funcionar. Si no lo agregué
correctamente, debería fallar. Eso significa que
no deberías ver la propiedad. Ejecutemos esto de
nuevo y veamos cómo funciona esto. A ver. No expliqué
esto así que vamos a permitir entonces voy a explicar
lo que hice aquí. Bien. No veo. Bien, ya ves, mi prueba pasó. ¿Qué puse aquí? Recuerda que estamos usando
Docker Compose. Hay una propiedad llamada Spring Docker Compose Saltar
en prueba falsa decir, quiero que uses la misma propiedad que estás usando
mi composición Docker, ¿verdad Entonces, significa que deberías
limar a los cables en mí mismo, y esto
realmente debería funcionar, ¿verdad? Así que no te lo saltas para
que sea capaz de usarlo. Entonces uno podría preguntarse ¿qué pasa
si desactivamos esto? Se puede desactivar
. Vamos a armarlo y a ver si funciona, ¿no? Seria. Vamos a dirigir a este tipo. Vamos porque tenemos
discapacidad, así que vamos a ver. Esto permite que sí, lo hace. Estoy seguro de que ahora
entendemos lo esencial. Porque esto ahora usa lo que
tenemos en nuestra composición Docker. ¿Qué le decimos a la baja de esto? Cuando comencemos
a pasar a producción y queremos ejecutar nuestra prueba
automatizada, no
se encontrará
Docker componer Por eso a esto le importa. Dejemos
esto como referencia. Te he enseñado esto funciona
y esto también funciona, ¿verdad? Esta obra también funciona. A menos que esto funcione. Digamos que esto
funciona. Entonces solo usando ambos, esto debería encajar. Yo escribí, sprink.
Eso es ron esto otra vez. A ver. ¿Por qué fallamos esto? Podemos decir incapaz de
crear servicio secuestrado, incapaz de detectar datos está
esperando este mismo
error que enfrentamos, La razón por la
que tuvimos este error fue porque recuerda que comprobamos aquí, el mismo
error que teníamos aquí. Creo que la base de datos dice que el nombre de
usuario no existe. Está buscando contraseña. Contraseña, estos son
el campo para esto, así que no lo está encontrando.
No es encontrarla. Lo que puedo hacer, vamos a comprobar la
configuración de este tipo. Una configuración para este tipo. Unidades J para toda la
unidad J. Así que vamos a este tipo. Lo que es mi entorno
que vemos falta. Falta el ambiente. Para esta guía, está funcionando todo en primavera móduli
costo ¿Qué obtuve? Me dif nombre de usuario,
ModultPassword. Entonces el hablar. El habla va a mi entrada. Veamos cómo funciona esto. Veamos cómo funciona esto.
Aplica este Módulo. Girar nombre del módulo, Módulo, eliminar P SSA, W, ¿verdad? Bien, así que esto es tan bueno. Nombre valorado Mt. También lo puedes encontrar
dentro de estas partes. Entonces, debería haber Nets ir. Esto es de los sistemas
del sistema. Está bien Modi Veamos. Bien, vamos a correr el respiradero. ¿Cuál estoy corriendo? Oh,
lo siento. ¿Qué estoy corriendo? ¿Estoy corriendo? Estaba
bien para dirigir esto. ¿Estaba corriendo por todo? Eso definitivamente caería. L C. Bien. Pude sacarlo a colación. Todo bien. Ver. Todo bien. Déjame pausar rápidamente este
video. Vamos rápido. Déjame depurar esto
para que no esperemos sin cesar a decir exactamente
cuál es el problema cuando no estamos usando esto y
volveré en 8 minutos Todo bien. Gracias. Bien,
chicos. Gracias. Estoy de vuelta. Entonces repasando la
documentación y así estas son las partes que
necesitaba para presumir realmente. Entonces esto es lo que
teníamos antes de ahora. Así que teníamos antes de ahora. Nosotros solo tenemos la carga de contexto, ¿verdad? Entonces para la aplicación base, tienes que colocar realmente
esto en donde coloques en el nombre de la clase que
tiene una oración de bota de resorte, luego haces clic,
realmente verifiques. Entonces Spring Modulate tiene
una anotación especial llamada At application Module
test que necesitas usar Ahora bien, si entra en
la aplicación Prueba de módulo, verías que
contiene prueba springbo Contiene prueba springbo
y también contiene algunos detalles adicionales que
realmente se utilizan para
la prueba del módulo ¿Ves? Por ejemplo, el módulo prueba la configuración
automática. Este es uno que podemos usar
físicamente. Esto se recomienda que
utilicemos cuando realmente
escribimos pruebas en
un Modult de primavera Lo mismo que
hice aquí. Ahora bien, ¿qué hace? Todo bien. Este video ya es largo. Así que volveré en
el siguiente video para explicar algunos de los detalles, luego creamos realmente
creamos las pruebas de otros módulos.
Muy bien, gracias.
13. Prueba de integración 2: Todo bien. Gracias chicos
por volver conmigo. Todo bien. Esto es Z aquí. Bien, así que
empezamos con esto para
mostrar realmente el caso de prueba. ¿Cuáles son los criterios que necesitas para realmente las cosas que
necesitas cumplir? Número uno, en la
aplicación a Yamo por favor aplique
el Yamo para su prueba De hecho estoy a favor de que usemos
la configuración automática. Cuando hacemos eso,
tenemos dos opciones. O bien podemos comentar esto
para usar la composición de Docker,
entonces no nos saltamos en la prueba, pongo aquí la composición de Spring
Docker, Spring Docker, así que se supone que
no debo
comentar Spring Docker componer,
mantener en prueba falso. Si hacemos esto, es usar
propiedades en una composición docker. Eso lo mostré en el último video. Sin embargo, si quieres usar
esto, también puedes usar esto. También podemos usar la
fuente de datos directamente. Entonces, el que
prefiéramos realmente funciona. De hecho pude
demostrar esto de la misma manera, en el último video. Así que voy a levantar esto por ahora. Yo solo viviré esto por ahora. El siguiente paso que debemos
llevar a cabo es este para nuestra prueba de módulo Bs para
la prueba del módulo Bs, esa es la prueba que
está comprobando esto. Recuerda, esto es basado en
aplicaciones. Esto es esto es basado en módulos. Esto está favoreciendo este modelo de
invención, este paquete. Esto está favoreciendo a la base, está mirando a la base Esta prueba está
mirando a la base. Para que realmente escribas esto, verías que así es
como tienes que modelar. Hay que obtener los módulos
de
aplicación de esta clase, luego verificar. Entonces lo siguiente
que debes hacer, necesitas cablear
la configuración. Vas a más el bug, modifyn configuración cuando lo
haces son la variable de
entorno Recuerda que estoy usando la variable de
entorno aquí. Este entorno, si
piensas que es demasiado trabajo, creo que eso es
demasiado trabajo básicamente, básicamente puedes
simplemente quitar esto y usar la prueba de
composición de Docker, eso solo favorecería los otros chicos Docker
la prueba de
composición
simplemente funcionará Creo que eso está claro.
Usa esto usando esto, debes agregar a este chico. O no lo eres, usa este otro tipo y eso realmente
debería funcionar, no
tienes que seguir agregando
el entorno
vaable esos tipos Una vez que hagas eso,
ahora hay una cosa especial que
quiero mostrarte. Hagamos esta prueba a menos
que sea algo genial. Todo bien. Entonces ya
ves que esto está hecho. Ahora, por favor, échale un
buen vistazo a esto. Bien, perdón, esto aún no
está hecho. ¿Qué hice mal otra vez? Bien, entonces esto es ver el error. Entonces incapaz de conectarlo. Oh, mismo error mal,
es divertido mal. Entonces esto es
vamos a comprobar el error. Pensé que esto ya estaba
arreglado. MadldPassW. Lideró esto. Sí, esto está arreglado. Esto ya está arreglado. ¿Por qué no lo
recoge? De este tipo. A ver. Vuelvo a fastidiar
algo. Oh, bien. Impresionante. Impresionante. Lo recojo de aquí. ¿Está distinguiendo
el. Eso es gracioso. Se distingue la prueba. Necesito correr desde arriba
en
lugar de esto. Nunca me di cuenta de eso. Entonces ves a Kass diferente. Entonces este es uno, este es otro. Veo perder este concurso. Necesito agregar la
configuración para esto también. Supongo, con eso, creo que simplemente me apegaría a
mi palo justo a este tipo. No tengo que molestarme con toda la configuración
cada vez Se está poniendo molesto, de verdad. Volvamos aquí.
Vamos a ejecutar esto de nuevo. Estoy huyendo de
este lugar sin que
esto no tenga variable de
entorno. Entonces huyamos de
este tipo. Bien. Entonces mira esto funciona.
Impresionante. Entonces esto funciona. Entonces supongo que ese es el punto. Entonces solo me di cuenta de que cada uno de ellos tiene una configuración
diferente. Eso es bastante gracioso. Bueno,
creo que es genial en cierto modo porque cada uno de ellos podría estar usando diferentes
configuraciones. Así que varios podrían ser de configuración
diferente. Bien, así que esto es lo
que quería mostrarnos. Entonces, miremos esto.
Veamos esto. Entonces ves que
hay un nombre lógico. Así es como se expresa, es capaz de encontrar de dónde
estás huyendo. El nombre lógico es
verificar este paquete, claro, es verificar
el paquete en el que se encuentra. Es por eso que
en realidad pude conseguir este paquete de mercancías. Luego el paquete base, también identificó el paquete base desde
donde se está ejecutando. Se comprueba que los módulos
directos. Ver, no hay
dependencias y porque hay dependencias, es por
eso que se ejecuta. Llegaremos a un
caso en el que estamos cableando cosas a otro módulo de un modo a otro modelo, inspeccionaríamos esto también
y vemos la diferencia. Vamos a estar viendo que la dependencia
es en realidad label de. El único ser que
se identifica aquí es esta clase de
aplicación al curso de primavera. Espero que quede claro. Podemos mirarlo fácilmente. Mientras ejecutas la prueba
cuando tienes errores, a veces me salen errores que
tienes algunas dependencias que no
atendiste Es necesario verificar
qué dependencias. Los puedes encontrar fácilmente aquí. Creo que lo he
podido explicar. Antes de terminar rápidamente este
video, vamos a conectarlo rápidamente. Hacer para inventario,
hagamos lo que quiero decir,
hagamos por orden. Hagamos por orden. Entonces vamos por orden, de
la misma manera. Entonces solo se necesita lo mismo
toma el mismo tipo que este. Entonces solo para verificarlo solo
verificando el modelo, ¿no? Entonces esta es una prueba de
modelo de aplicación. Yo diría, prefiero
usar config, inventar
configuración Porque aquí es donde se tiene que contener
alldi. Hagamos por orden. Aquí
es donde el inventario. Hagamos por orden.
¿Cómo es que esto es Liber debería ser jurar
debería ser esta influencia Tan bueno para esto. Prueba Lq Vamos a llamarlo a la prueba de
inequidad. Mismo módulo de aplicación pruebas, luego pruebas, llamarlo fa. Todo bien. Con eso hecho, encendamos todo. Simplemente correré de forma aislada para otra integración antes que luego pasemos a la otra
y luego ejecutemos todo sobre la marcha. Pero ya no necesito agregar la variable de
entorno. El motivo es que
voy a agregar el otro usando
bin que podemos ver eso. Ves esto fue capaz de
encontrar los contenedores dentro de este. ¿Ves? Esto es simplemente
increíble. Esto es increíble. Es capaz de ver lo que
realmente sucede. Yo iba a localizar béisbol lo mismo
va a pasar por esto. Pero vamos a ejecutar
todo a la vez. Asegurémonos de que
todo funcione con precisión. Todo bien. Así que recuerda, ya no
estamos usando esto. Si usamos esto vamos
a querer inyectar inyectar las propiedades
ambientales, pero las variables ambientales. Pero para esto, solo podemos usar esto directamente, así que
solo lo pones arriba. Pero vamos a la producción, al parecer tenemos que usar esto. Entonces probablemente tenemos
en nuestro entorno. Espero que sepan que hay
en marcha para agregar ambiente. Entonces lo que puedo hacer es ir a mis ventanas ir a mis ventanas,
crear un ambiente. Una vez que creas un entorno, comienza Inteligente para
elegirlo desde el inicio, entonces deberías
poder cargarlo realmente. No tengo que hacer el en memoria para Intelligen o
la variable de entorno Esa es otra forma
de hacerlo, no hay que hacer
más configuración. Para aquellos que no usan no
quiero usar Da combos y la configuración de ¿cómo uso el entorno
viable? Así que recoge cada prueba. Simplemente vaya a la variable de
entorno para la variable ya sea para
su Linux o su MAC, luego vaya a la Creo
que debería estar bajo perfil o Bash LC, luego agregue esas
variables de entorno ahí, luego muestre el hiper sistema
para que realmente
se retengan una vez que
realmente reinicie su Entonces una vez que mires esto,
esto debería funcionar con precisión. Se pueden ver obras. Esto funciona. He creado toda la integración
base para este cuatro este video, solo
agreguemos solo agreguemos
un problema. Yo solo agrego un número. Entonces solo traeré esto
solo agrega un problema. Entonces solo llámalo creado
Bs inventario. No, no, Bs. Se creó la integración Bs que hice
para decir prueba de integración. Todo bien. Espero haber creado
para pagos, aunque. No estoy diciendo pagos aquí. Solo somos un
crédito de cliente por pagos. Entonces hagámoslo por los pagos, también. Entonces pagos. Entonces integración de
pagos. Lo mismo que la prueba de modo
aplicación, solo haz esto muy rápido, luego verifica porque este
video ya es muy largo. A mí me gusta mantenerlo
tiros para que
siempre podamos romper en cualquier
momento y volver. Yo sólo dirijo esto una vez más.
Yo dirijo éste más. Por favor, sea muy rápido. Quiero hacer esperar a mi
público. Bien, así que
vamos aquí está hecho. Esto está hecho, esto hecho. T está hecho. Déjame
copiar esto. Entonces solo persisten de inmediato. Gracias, mi público, y hemos podido persistir
con éxito. Bien. La integración y
todo funciona con precisión. Así que vamos a cerrar
esto. Cierra esto. Bien. Entonces su empuje. Bien. Y los hábitos. Deberías
cerrar. Auto automático. Todo bien. Gracias, chicos. Nos vemos en el siguiente video.
14. Prueba de integración 3: Hola, chicos. Gracias
por volver a mí. Esto es Z aquí. Todo bien. Vamos a romper cosas.
Vamos a romper cosas. Esa es toda la
esencia del desarrollo. Deberíamos poder
romper cosas. Ahora, recuerden que
ni siquiera podemos inyectar esto, hagámoslo ahora. Hagamos de esto un público
así al revés, solo
quiero
mostrarles cómo funciona esto, ¿verdad? Vamos a crear otro servicio porque es bueno
que veas cómo
funcionan las cosas cuando cometes el error y las cosas se
rompen. Me quitaré esto. Voy a etiquetar esto como un
servicio al servicio. Entonces vamos a traer lo privado. No, quiero el inventario. Quiero el repositorio de inventario. Viniendo aquí. Postulación
eventual, entupost Vamos a conectarlo con el constructor de edad
adquirido. Así que eso hará que sea una final, sólo una final aquí, ¿verdad? Solo consigue un
método de tontería, ¿verdad? Solo consigue algún método de tonterías. Sólo llamémoslo una prueba de pausa
pública. Sólo quieres romper
la prueba. Prueba de rotura. Probablemente solo v. Prueba web
acabo de llamar inventario, los datos solo llaman algo. Solo datos.
Realmente no lo estoy usando. Sólo quiero
ver cómo funciona. Yo sólo T datos. Esto no
funcionaría, h. los datos son balnearios, solo
déjalo así. Bien. Con esto a, vayamos al otro modo. Vamos a ejecutar esto.
Veamos qué pasa. Bien, veamos qué pasa. Bien, eso se acerca. Base de datos conectada
correctamente. ¿Pasa? No. ¿Por qué pasa eso? Vamos correctamente, no se pudo
cargar el concurso de aplicaciones. ¿Ves? Error al crear este
servicio hmm error al crear el otro servicio. ¿Por qué? Porque la dependencia
insatisfecha es constructor especial,
bla, bla, bla, bla, Lo que dice, esperaba al
menos una viga que califique a los candidatos de
cable automático, ¿verdad? Entonces, si miras esto,
ya lo he conectado, ¿verdad? Pero este tipo está
archivando sasicamente porque
no lo permite No lo permite. Entonces
eso es algo bueno. Entonces ningún rayo calificador
en realidad está diciendo esperado ser
que califique a los candidatos de cable automático
porque esto no está permitido Ese es el punto.
Esto no está permitido. No
le permitirá seguir presentando. Vayamos
también a la clase base. Tratemos de ejecutar esto. Este tipo dirige la
clase base. Entonces hagámoslo. Veamos qué pasa también. Se supone que tienes que cargar en la mayoría de estos tipos y
veamos qué pasa. Porque corre, porque
este tipo corre aislado. Pero para este tipo,
ves que falla. Entonces ves todos nuestros pases de
casos de prueba
excepto esto, que falla. Cada uno de ellos va a
seguir rompiendo porque este tipo
se romperá diciendo:
Oye, no te conozco. No te conozco.
No me has definido nada de aislamiento. ¿Quién eres exactamente y por qué
debería permitirte pasar?
Entonces ese es el caso, ¿verdad? Reservamos sobre esto, así que sólo voy a
volver y moverlo. Así que necesitaba mostrarles
esto para que sean muy conscientes de que no pueden simplemente
mover las cosas, ¿verdad? No se puede simplemente mover
las cosas. Una vez que lo
muevas alguien podría decir, ¿y si entro aquí? Y si entro en la
otra integración, ¿verdad? Yo hice la otra
integración, eso es lo que se siente. ¿Estoy en lo correcto? ¿Cuál es la
ventana de ejecución? Otros exegones Y si hago ese otro exegon
¿Y si solo auto cable? Yo digo, y si
solo auto wire como auto wire y yo solo
auto wire service. Otro servicio aquí.
Yo digo, probablemente aquí. ¿Qué va a pasar? ¿
No se supone que esto funcione? Bien. Vamos a
probarlo. A ver. Porque es bueno
romper cosas, así que tenemos una buena idea
de cómo funcionan las cosas, entonces volveremos. Puedes ver que aún falla. Sigue fallando porque no
lo está viendo, no
lo está permitiendo. En el número, esto debería funcionar. Esto debería funcionar. Pero ahora se está rompiendo porque
esto sería burlado Esto básicamente es
inyectarlo, pero no está funcionando. Eso es por una razón específica, que luego vamos a tocar más
adelante en este curso. Yo lo mostraría. Ahora mismo, no se supone
que sea el otro, pero necesitaba romper el stop para que
podamos entender rápidamente
cómo funciona esto. Entonces nos daría una buena
idea que solo podemos ir a
elegir cosas en
módulos modernos e
inyectarlo en un modelo pensando,
eso debería estar bien. No, no está bien. Debe seguir algún conjunto de reglas
si desea inyectar un parámetro en particular o un particular estado en
otro servicio. Eso es básicamente vamos a
asegurar que prueba a una persona, luego traemos este
video para cerrar. Entonces en realidad tocaríamos algunas cosas más geniales
en el siguiente video. Toca algunas cosas buenas en
el siguiente video. A ver. Pagos, bueno. Inventario, bueno. Entonces la base, bueno. Entonces el otro inventario, bueno. Entonces esto es bueno.
Gracias chicos. Nos vemos en el siguiente video.
15. Interfaz con nombre: Todo bien. una vez más por
acompañarme. Esto es Z aquí. Sí. Entonces, ahora mismo, lo que estamos haciendo es
que realmente queremos exponer un servicio
del inventario al
otro. Todo bien. Pensemos en
ello de esta manera. En realidad vas a la tienda, valoras los inventarios, eliges las cosas
que quieres que pretendes comprar Una vez que tienes eso, al parecer eso es parte de tu pedido. Todo será enviado
como parte de su pedido. Lo que estamos tratando de
lograr ahora mismo es evaluar realmente el
inventario a partir del pedido. Ahora recuerden, lo que
tratamos de hacer es lo que
intentamos hacer es asegurarnos de
que cada uno de estos tipos
esté estacionario, más como si en realidad estuvieran
confinados dentro de cada modelo. Sin embargo, habrá
escenarios en los que necesite
acceder a un servicio dentro de un
servicio. Entonces, ¿cómo se hace eso? En el último video te mostré vía prueba de integración que si acabas de cablear en el servicio, empiezas a conseguir escenarios, ¿verdad? La prueba empieza a fallar, diciendo que no estás cumpliendo Con lo que se espera,
las reglas que se
han fijado en la
primavera modulan. Lo que tenemos que hacer,
ahora hay una manera particular en la
que necesitas hacer esto. Hay dos tipos de exposición que puedes hacer en
hay tres tipos, básicamente. Se puede exponer un paquete
completo. Se puede exponer un sub paquete. Hay diferentes maneras. Entonces puedes exponer que
también puedes exponer también puedes tener
también puedes tener un paquete o un modo
que esté abierto a todos. Entonces esos tres tipos. Entonces el
primer tipo del que hablaremos es una
interfaz con nombre. Esa es la palabra. Se llama interfaz con nombre. Así que vamos a saltar
rápidamente y vamos a ver cómo se desarrollará esto exactamente. Hago un poco
de explicación, así que tenemos antecedentes. Entonces, ¿puedo saltar directamente al código y ver cómo se desarrollará esto? Bien, entonces para hacer esto mucho más para que
podamos destacar esto, crearía un sub paquete
llamado expuesto, ¿verdad? Voy a llamar a esto exponer, ¿verdad? Entonces esto es solo con fines de
demostración, veremos exactamente
cuando veamos, oh, cuál fue expuesto, Oh, esta es la guía que me
expusieron, ¿verdad? Entonces dentro de esto, entonces estaría creando la interfaz
que estaríamos exponiendo. Voy a llamar a este servicio
de inventario. El servicio de inventario
estará exponiendo. Entonces esto es lo que vamos
a exponer, ¿verdad? Estaré exponiendo esto, pero no expondría
la implementación. Sólo expondría este servicio, esta interfaz en sí misma, y eso es lo que haríamos. Eso es básicamente
lo que vamos a hacer. Entonces, ¿qué pasa con
la implementación? Todo bien. Entonces con esto, antes que nada, vamos
a etiquetar la firma. Entonces tendríamos algo
llamado hagamos el inventario. Inventario DTO, estoy seguro de que
sabe que no
querría exponer el
inventario en sí Inventario DTO
crearía eso en un minuto. Así que busquen. Vamos a buscar el inventario. Inventario por nombre. Por nombre, que es exactamente
como lo tenemos adentro, cuál es el nombre ahora
en el repositorio. Usaremos el nombre para ir a buscar. Entonces también tenemos una
lista de inventario DTO. Debido a que esto es
lo que estoy exponiendo, no quiero exponer
ninguna implementación central de mi clase de inventario. Esto será fetch
fetch todos en nombre. Eso todo en nombre. Esto
tomaría una lista lista de cadena, luego lo llamaría
nombre de inventario nombres de inventario. Eso básicamente sería esto
porque estoy exponiendo esto, debería crear esta imagen porque debería ser
expuesta también porque si tienes una DTU que no está expuesta y estás
tratando de llamar dentro del servicio,
el modelo de primavera también se
quejaría Esto debe estar dentro de
lo que quiero exponer. Estoy tratando de exponerlo también,
así que debo crear este DTO. Todo bien. Vamos a
tener este DTO básicamente debe contener
exactamente los mismos campos que este realmente contiene Dividamos esto a
la derecha. Escojamos esto solo para ahorrar tiempo. Escoge esto y simplemente
quitamos lo que no necesitamos. Sólo sácate esto.
Necesitamos la identificación. Necesitamos un nombre. Esto funciona. Probablemente podrías
pensar en usar. De hecho, puedes
pensar en usar Bam Mapper. También se podría
pensar en usar un mapa golpeado. Existen varias herramientas
que básicamente puedes usar. Cada una de estas herramientas en realidad tiene un
poco de sobrecarga. Yo cuando tengas un grande, es por favor tanto
como puedas,
por favor utilízalos. Debido a que esto es
relativamente pequeño, quiero hacerlo manualmente. Permítanme usar nuestros
datos aquí. A datos. Lumbxh solo haz el
trabajo por mi manera. Toma los otros
códigos estándar. Mi interfaz ahora tiene esto. Ahora vamos a la implementación del código. La implementación se
encontrará en el propio
módulo de inventario, no
quiero exponer
la implementación. Solo quiero exponer
solo la interfaz sola. Tengo el inventario. Entonces solo déjame ayudarme
a mí mismo. Llamadas. Ingreso de servicio de inventario. Entrada de servicio de inventario entonces
implementaría la
interfaz, ¿verdad? Entonces debería estar al servicio. Voy a estar cableando un
cable en chicos sub. Voy a usar require x constructor
para hacer el cable en. Entonces vamos a poner en práctica esto. Bien, así puedo cerrar esto. Ahora, traeré el repositorio
privado de Inventure. Gracias. Autocompletar.
Nosotros tenemos esto. Entonces físicamente podemos
crear vamos a tener
una clase TO, ¿verdad? Tengamos un inventario
TO. Inventario Util. Vamos a tener un inventario
Util que
realmente usaría para mapear el inventario
al inventario TO Hay una clase co. Es una co anotación del código de
madera en la utilidad. En la clase de utilidad,
lo que hace por ti, se asegurará de que esta es una clase final y cada método que crees
dentro de esta clase, es un método estático. Básicamente funciona para nosotros.
Es una cosa muy impresionante. Entonces, ¿qué hacemos a continuación?
Vamos a estar convirtiendo. Tenemos un inventario público, estamos convirtiendo de inventario
a inventario DTO
restaurantes inventario usted Vamos a llamarlo mapa. Vamos a llamarlo mapa. Vamos
a llamarlo. El mapa está bien. Sí, tomemos esto. Contamos con DTO de inventario. Hagámoslo más
divertido. Hagámoslo más divertido.
Hagamos de esto un constructor. Hagamos el DTO, constructor. Sí, eso funciona. Luego puede hacer en
ningún constructor x, en absoluto constructor Ax,
N constructor. Siempre requieres un constructor, en realidad
tienes estos también. Creo que esa fue 118 una
versión particular del cuaderno de bitácora. No sé si
esto ya no es necesario. No nos hace daño. Tenemos este constructor. Con esto, puedo construir. Con esto, sólo puedo regresar
directamente. Acabo de regresar. Entonces el inventario DTU DT
el Constructor o construir, ¿verdad? Así que eso funciona para nosotros. Así que sólo podemos de inmediato, vamos a ver qué es el contenido
dentro del inventario conseguido. Bien, así que vamos a jugar
esto a la derecha. Para que podamos ver con qué
estamos trabajando. Sí. Entonces necesitamos la identificación. Necesita la identificación. Impresionante.
¿Necesitaría el nombre? Impresionante. Necesitaría
la descripción. Impresionante. Yo necesitaría el precio. Entonces finalmente consigue precio. Esto ya funciona para nosotros. Si te das cuenta, no
coloqué ningún método estático ahí ves como esta
noción en particular, básicamente funciona. Si vienes aquí, con esto, podemos hacer el depositario Dots obtiene inventario por nombre. Obtenemos el nombre. Yo en realidad
lanzamos un opcional, luego haremos un
mapa. Hacemos un mapa. Hacemos un mapa, entonces puedes ver esto devolviendo un
opcional, luego haremos un mapa. El mapa, después voy a
tomar el inventario, después lo voy a pasar a Voy a llamar
al inventario Inventario T sí, así se puede ver porque estoy usando referencia de método porque automáticamente método
estático. Entonces esto funciona para mí. Entonces luego return obtiene
menos una excepción, de lo contrario, o cierto porque usaremos la excepción para
muchas cosas más adelante porque
realmente quieres hablar sobre el modo abierto sin realmente venir a jugar. Esto realmente funciona. Lo mismo con esto,
vamos a hacer lo
mismo con este tiempo alrededor vamos a mirar a través,
eso va a hacer lo mismo. Inventar para tener un repositorio. Tienes el
repositorio de inventario que recibe nombres, luego paso los nombres
de inventario. Pasando nombres de inventario. Ahora tengo una lista de inventario. Entonces, en realidad, flujo a través. Yo flujo a través, luego hago un mapa un mapa y de hecho
rellenar uno de los primeros en
realidad rellenar uno
de los primeros datos y rellenar uno de los
primeros datos. En realidad ven Bien chicos,
creo que en realidad tenemos un
usas que se quita a este tipo. También tomo el inventario. También mapeé esto.
Puedo escoger esto. Simplemente lo mapearé
usando la referencia. Después de mapearlo, entonces lo
llevaremos a la lista de la lista. Esto es, creo que es una característica de
Java 17, así que creo que las fotos
recogen luego la lista. Bien, entonces tenemos esto. Tenemos esto dentro de esto, entonces tenemos nuestra implementación. Esta es nuestra implementación
dentro de este tipo. Entonces puedo decidir que
no voy a exponer a este tipo, así me lo puedo quitar, ¿
verdad? Puedo quitármela. No quiero que se
acceda a ella en ningún lado. Estoy seguro de que estamos viendo exactamente
cómo se desarrolla esto, ¿verdad? En realidad estamos limitando
la accesibilidad, ahora mismo tenemos el DTO, ahora tenemos el servicio, hemos hecho en realidad tenemos
la implementación Entonces surge la siguiente pregunta, ¿cómo la exponemos? Para exponer un subpaquete. Sé que
en realidad debería haber explicado cómo exponer el paquete
para un paquete sf, pero basado en nuestra implementación, no
tengo otra opción. Creo que primero estaremos exponiendo
el sub paquete. Ahora empezamos a hablar de
probablemente implementaciones. Lo siento, las excepciones, entonces te voy a
mostrar cómo exponer
un paquete completo, y además llegamos a esa parte, de
hecho te voy a mostrar. Bien. Entonces, ¿cómo hacemos esto?
Entonces lo que haremos
es crear un
paquete que sea info. Entonces tenemos un paquete
que es archivo de información. El paquete que es infofle
entonces entonces llamaríamos a un anuncio en el marco de primavera,
luego modulif, luego Esta es la interfaz llamada.
¿Qué quieres exponer? Cuál es el nombre del
paquete que quieres
exponer se llama expuesto. Entonces voy a ir a la derecha otra vez, g, spring framework, interfaz de nombre
modult Entonces, ¿cuál es el
nombre del paquete? Este es el nombre del paquete. Recuerda, esto es solo
para subpaquetes, ¿verdad? Si quieres exponer un subpaquete y no un paquete o módulo
completo, como lo llamas, pero
este es un submodelo Entonces ya que sabemos que nuestro modelo es un modelo de paquete y paquetes. Entonces, si quieres exponer
el submodelo, usas esto. Si quieres exponer
algo aparte de esto, probablemente quieras
exponer todo el paquete, hay otra
manera de hacerlo. Entonces estarás usando
algo llamado modelo de
aplicación, ¿verdad? Entonces ahí vamos a llegar. Entonces esto es lo que
vas a estar exponiendo. Ahora, surge la pregunta
si estás exponiendo esto, debes informar al otro módulo que estarás recibiendo información de este inventario. Entonces necesita saber que está recibiendo
información de esto. Entonces como resultado, aquí también
tenemos un archivo de información del paquete, una información del paquete entonces
estaríamos diciendo esto también, Oye, estarás
recibiendo un módulo. Con un sub paquete esto. Eso también va en
línea con una org, el marco de resorte, moduleaf pero esta vez
alrededor del módulo de aplicación Entonces dentro del
módulo de aplicación, recuerda, última vez que dije si
quieres ver lo que está contenido dentro de algún parámetro solo
un Control P. Ya ves, Control P
te mostraría los detalles. Esa es una aleta inteligente. Se puede ver que hemos
permitido dependencias. Eso es exactamente
lo que estamos buscando para las dependencias permitidas Hacemos dependencias permitidas
y recordamos, porque si la
miramos una vez más, dependencia es una matriz, así que en realidad
colocaría esto de esta manera Entonces estamos diciendo, por favor espere información del módulo de inventario,
sub paquete expuesto. Espero que esto quede claro.
Voy a repasarlo otra vez. De hecho, para llegar realmente a tomar
dependencias, tenemos que definir un
paquete que es información lejos dentro del otro módulo Entonces usamos un arte
con esta anotación, que es modelo de aplicación, pero esta es la entrada en g spring framework
module application module Entonces definimos la dependencia
permitida p sería el modelo de inventario, sub paquete, expongo. Recuerda, este es un sub paquete. Supongamos sub paquete. Ahora que hemos hecho
esto, ¿podemos probarlo? A ver si has roto
algo. Lo primero es lo primero. Vamos a crear un servicio Dummy O, servicio DumMio de Australia
del Sur Sigo creando
este otro servicio y
eliminándolo de la lista porque no estoy
seguro exactamente cómo en el, así que todavía no quiero usarlo
realmente Vamos a etiquetar este
servicio en servicio, y vamos a cablear a ese tipo. Entonces cableado de alambre,
utilizo al menos usando el
artículo como constructo privado, final, luego servicio de inventario. Servicio de inventario. Ves
esto no es quejarse A diferencia de la última vez que
estaba mostrando todo rojo porque en realidad los modificadores
el modificador *****, en realidad
eliminamos al público, justo por ahora, pero esto
está realmente disponible Entonces esto se queja. Vamos a averiguarlo. Vamos a averiguarlo. Entonces, lo que hacemos solo ejecutamos esto. Vamos a hacer una prueba. Esa es la manera de confirmar. Esto funciona,
no deberíamos obtener ningún error. Todo debería
seguir funcionando tal como está. Pero sin embargo, si esto realmente eligió un
error deberíamos básicamente ver por qué viene el
error. Espero que venga
un error del orden o prueba de
integración ya que ahí
es donde realmente
conectamos las cosas. Ya ves que las cosas van entrando, vamos a revisar el inventario. Esto eligió un error,
este eligió un error. Veamos cuál es el error? ¿Cuál es la fuente de error aquí?
¿Cuál es la fuente del error? ¿Qué fuente de error?
Dice así. No se pudo encontrar un contenedor de tipo, no se
pudo encontrar una
factura de tipo esto, lo
que significa que no admite el
uso del servicio de inventario. Pensé que era capaz de encontrar la papelera porque esto
en realidad no está disponible dentro de él. No tiene esto disponible. No tiene esto disponible. Lo que hacemos, vamos a trasladar a este tipo a este lugar. Veamos esto. Vamos a refacturar a este tipo, volvamos a ejecutar esto porque
expongo todo aquí, buscando la papelera.
Vamos a ejecutar esto de nuevo. Voy a entrar aquí,
correr esto alrededor de esto. Que es el Oh, ahora ya ves,
es una gran que hicimos. Ahora está arruinando
las cosas aquí arriba, ¿verdad? Entonces vamos a mover el inventario. Está reclamando, Oye, quieres un inventario pero no lo puedo ver. Entonces, en lugar de mover esto, probablemente
pueda
etiquetarlo como público, ¿verdad? Esto en realidad debería
ser un público. Pero si etiquetas esto como público, el problema es, si lo
etiquetas como público,
quedaría expuesto. Estoy tratando de evitar
que quede expuesto. Entonces ahora mismo, esto no
es verlo. Esto está
buscando el inventario. Entonces esto ahora puede
localizar a este tipo, porque recuerden que esto
sigue siendo público Entonces, volvamos a ejecutar esto.
Vamos a ejecutar esto de nuevo. Está buscando a un ben
buscando a un ben. Entonces, dejemos que entre
la viga. Veamos esto. Bien, creo que debería simplemente ejecutar el otro eventu solo
para no perder el tiempo Pero bien, solo deja que esto se vaya. Bien, yo estaba
pasando estaba
pasando por estaba pasando,
yo estaba pasando. ¿Puedes encontrar el ben? No. ¿Por qué no encuentras
la viga? A ver. Volvamos a ver el error.
Veamos el error? No se pudo cargar concurso
porque correcto. Todo bien. Bien. Sí, esto
debería fallar. Esto debería fallar. Todo bien. Esto se supone
que fracasa, básicamente, porque eso básicamente nos
llevaría al siguiente paso, ¿verdad? A pesar de que movemos
las cosas aquí, todavía
podemos fallar diciendo:
Oh, esto no está funcionando, ¿verdad? Que es la
parte complicada. En el siguiente video, realidad
voy a mostrar exactamente
cómo funciona esto, ¿verdad? Esa fue solo la parte
porque así es naturalmente como
pensaría un desarrollador al entrar aquí. Así que en realidad haz que esto
funcione y decir, tal vez cuando realmente
agrego esto en entonces se encontrará
la papelera, pero
ese no es el caso realmente. Cuando estés ejecutando la prueba, debes asegurarte de decirle a
cada una de las pruebas que oye, hay una dependencia
también entrando aquí. Porque hay una dependencia. Diciendo solo el módulo solo, debe decirle a la ruta del
módulo de prueba también hay una dependencia vienen permitir que los módulos o el módulo madre entren para que se ejecute la prueba. Más de eso en el siguiente
video. Gracias chicos.
16. Llamada Interfaz 2: Bien, gracias chicos
por acompañarme una vez más. La última vez que nos encontramos con algo complicado
porque en realidad
inyectamos la interfaz aquí o diciendo, esperamos que
esto funcione. Pero en realidad nos
encontramos con un problema. Entonces movió todo lo definido aquí y lo colocó dentro del paquete
expuesto pensando, esto debería funcionar o el sub paquete
expuesto, esto funcionaría, pero
aun así ha fallado, ¿verdad? Aún así ha fallado. No obstante,
la parte complicada es solo esto, Todo lo que tienes que hacer ahora, el punto es que la
prueba se está ejecutando. La prueba sólo correrá
contra esto solo. Todo lo demás fallaría. Eso es algo de la culata en regla dentro del módulo de resorte. Permitir que esto tome dependencias, ahora
necesita tomar un
parámetro llamado mode Modo. Modo, entonces arrancas dependencias
directas Se trata de dependencias directas
o usa todas las dependencias para permitir cualquier dependencia que probablemente
esté
agregando más adelante en Verías donde
esto también
fallaría porque hay algunas partes que en realidad
no están permitidas, sin embargo, usemos dependencias
directas Si escoges esto, solo
ejecutemos esto directamente y veamos qué pasa. Vamos a dirigir directamente a
este tipo. L solo ejecuto esto directamente. Esto estaba fallando antes de ahora. A ver. ¿Esto falla? Recuerda que trasladamos todos los
detalles aquí. ¿Esto falla? En realidad,
no va a fallar. Todo bien. Entonces vemos esto
realmente pasar, ¿verdad? Entonces, como que nos
paso a través de cómo un desarrollador
probablemente querría acercarse al modelo de ping. Por favor,
necesitas realmente tener ese cambio de mentalidad
que puedes simplemente mover
las cosas de paquetes
a paquetes o modelo
a subModelTing, eso realmente intentaría
seguir las reglas porque eso
mejora exactamente lo que esto se
supone Ahora, entremos aquí también. Vamos a entrar aquí. Y escojamos esto y vamos a ejecutarlo también. Esto
también estaba fallando antes. Entonces, ¿vamos a ver qué pasaría? Esto básicamente cablearía el contexto del
resorte, todo. Recuerda, esto en realidad contiene la prueba Springbok, ¿verdad? Bien, ya ves
que eso también pasó. Así que hagamos
toda la prueba, ¿verdad? Derecha. Entonces vemos que
no hemos roto ninguna regla. Recuerda que estamos
desarrollando en pasos. Por cada paso que estamos desarrollando, estamos ejecutando la prueba para asegurarnos que no hemos roto las reglas. Rompemos las reglas,
básicamente vemos el tema que, esto es porque hicimos esto
y lo hicimos y lo hicimos. Todo bien. ¿Ves pasar
todo? Ahora, déjame mostrarte
algo interesante. Recuerda que
te mostré antes mientras estamos observando
este paquete base, ¿
puedes ver que ahora tenemos dependencias modales directas,
que es eventualmente Antes de ahora no teníamos ninguno, NINGUNO, pero ahora tenemos invención porque en realidad lo hemos
incluido y
en realidad ambos
lo hemos incluido en el uso del paquete que es info para exponer la interfaz como la interfaz
nombrada, que es para un sub paquete. Luego lo conectamos como un permitir la interfaz en
el otro modelo. Entonces en nuestra prueba,
le dijimos a la notación de prueba, Hey, permitir que también se conecten
las dependencias directas Y eso es exactamente lo que
pasó. ¿Todo bien? Entonces con esto entonces hazlo, si
no necesitas este servicio, puedes cablear en el servicio, pero ese no es el
objetivo en estos momentos. El espectáculo de que esto realmente
pasó para que luego podamos ver cómo funciona esto
con precisión. Todo bien. Entonces alguien también
podría hacerme una pregunta. ¿Y si pero
moviste este paquete, significa que
solo fuiste una
parte engañosa para que muevas el depósito de
implementación del servicio de inventario aquí? Oh, sí, necesitaba
demostrar que
necesariamente no tienes que hacerlo. Todo lo que necesitábamos exponer aquí era el detalle del inventario
y el servicio de inventario. Vamos a retroceder esto. Entonces
ahora lo volvimos a mover. Esto es
lo único que estamos exponiendo. Realicemos nuestra prueba. Vamos a ejecutar nuestro vamos a ejecutar toda
la prueba y ver, ¿esto sigue funcionando?
Esto se romperá. Si no funciona, no
puede encontrarlo, podemos encontrar una viga que estuviera solicitando para Ella
esto debería romperse. Estas dos partes deben
romperse. Pero ¿ se rompe? Vamos a averiguarlo. Bien, la prueba de
integración de pagos está pasando.
Bueno, eso funcionó. Prueba de integración, eventual
integración aquí, la base trabajada, otras integraciones de
eventos y otros trabajos de integración Ves que esto
realmente funciona bien. Yo he podido hacer ahora mismo es que
ahora mismo sólo
estamos exponiendo lo que
hay que exponer, ¿verdad? Sólo lo que hay que exponer. Esto ahora es contrario a
la forma en que algunos podrían haber construido
realmente un
servicio donde ahora permites que el otro modelo
lo sepa todo, como el otro modelo para
saber todo lo que está dentro del modelo de inventario. Pero en esta ocasión, solo
estamos exponiendo solo el sub paquete aquí. Eso es lo que queremos que conozca el
otro modelo. Si ahora entras aquí,
ves que esto es exactamente
lo que sabes. Si realmente creas
un método Domin, ahora llamemos a esto orden
público, está bien Vamos a crear orden. Entonces podemos llamar puntos de inventario, luego buscar algo y
aún así obtenemos los detalles que
necesitamos sin que la
aplicación se queje Espero que quede claro. Todo bien. Ahora hemos podido cablear
en la otra interfaz. Con eso, volvería a
borrar a este tipo. Definitivamente voy a publicar con
este video cortado correctamente, voy a borrar de nuevo a este tipo. Hemos sido capaces de hacer
esto. Ahora poder explicarnos y mostrarnos cómo funciona
la interfaz nombrada. Iré una vez más
por el bien de la claridad. La interfaz con nombre se utiliza
para exponer un subpaquete. Se utiliza para exponer un subpaquete, y cómo lo hacemos para usar la interfaz g interfaz
modnamed, nombre del subpaquete dentro del nombre del paquete sub dentro de
la información
del punto del paquete Entonces la clase objetivo,
que es esta parte, luego se le debe decir a la
clase objetivo qué dependencia debería
estar esperando o dónde debería estar esperando
datos o siendo redacción y cuál es entonces el
inventario expuesto. Inventario. Columna Colm
sub paquete, exponer. Gracias por acompañarme, entonces nos vemos en el
siguiente video. Gracias.
17. Servicio de pedidos 0: Todo bien.
Gracias por acompañarme. Hemos tocado
la interfaz de nombre. Ahora, volví a pensarlo. Estoy usando Java 21. ¿Por qué estoy usando datos y umbok? ¿Por qué no solo
uso registros, verdad? Creo que eso debería
ser lo mejor. Vamos a oe registros. Así que
vamos a sumergirnos en ello. Cambiemos esto a registros. Así que los registros en realidad
van por aquí, registro. Grabar, no necesito a
ninguno de estos tipos. Entonces cada uno de estos chicos
no va a ser un privado
porque va a ir dentro como
parámetro, entonces saco esto. Solo estoy usando los
esquemas de la inteligencia. Yo hago Control R o
cambio la semiclm a una coma, luego reemplace O. Cuando tenga eso,
entonces esto
realmente se convertiría en abrir esto realmente se convertiría en abrir Cierra esto, luego
abre esto. Todo bien. Entonces sí, así que básicamente
es como se verá el disco. ¿Cómo se verá un disco? Así que solo lo arreglo correctamente. Así es básicamente como se verá el
registro. Así que probablemente pueda hacerlo
más legible de alguna manera. Todo bien. Creo que
esto estuvo bien. Sí. Se ve bien. A ver. Creo que todavía se ve un poco horrible.
No es bueno en absoluto. Bien. Así que puedo
escoger esto aquí. Bien, sí, sí,
sí, esto se ve mejor. Se ve mejor. Así que
sólo me quito esto. Bien, esto se ve
mejor. Vamos a arreglar eso. Vamos a arreglarlo en el Evento u T. Esto ya no contiene
un Buda. ¿Por qué es antes un Buda? Porque queríamos hacer
pero ahora está en Java 21? Vamos a explorar la
bondad de Java 21, ¿verdad? ¿Qué
haría simplemente? Acabamos de crear Eventu DTO Inventory DTO
igual a nuevo inventario DTO Esto toma el ID IDC, IDS inventario u obtener ID, luego inventario para obtener nombre, inventario para obtener descripción, luego inventario no recibe precio Yo sólo me quito esto. Yo sólo regresaré
directamente aquí, regreso. Nos volvemos, eso debería ser. Entonces ese es el ajuste. Derecha. Entonces esto tiene más sentido. Ahora vamos dentro Esto
no cambia, no cambia. Simplemente me apresuré a usar un umbXJV en realidad
uso Derecha. Entonces esto es bueno. Esto es bueno. Esto va
a ser un método estático. Una vez que construyas esto, una vez que
lo construyas ahora mismo, reviso tu clase objetivo, seguirías viendo que esto es vamos a construir esto para que solo
puedas construir proyectos. Es bute. Bien, así que vamos a revisar
dentro de las clases. C entonces inventario, este tipo. Como pueden ver, es
una clase final, ¿verdad? Es una clase final,
y esto es estático. Entonces eso es lo que hace en la clase
Utilidad. Solo quería mostrarnos
esto, y automáticamente
crea un constructor privado que
se supone que no debemos instantáneamente. ****. Genial. Ahora tenemos esto. Ahora lo más esperado
o el servicio. Sí. O el servicio. Todo el servicio. Creo que creo que vamos a
aguantar un poco. Antes de eso, vamos a guardar
esto a Git, bien. Guardemos esto para que sepamos
que somos capaces rastrear dónde hicimos
los cambios, ¿verdad? Entonces, vamos a guardarlos a Gits. Así que voy a ir a Gates. Voy a ir a Gates. Lo estoy haciendo en
mi segunda pantalla, así puedo traerlo aquí. Entonces vayamos a
Iré a mi repost. Oh, lo siento, chicos, me dejo traer esto. Déjame hacer esto. Entonces este es el costo mensual. El caso del módulo entonces
vamos a los temas creados. Vamos a crear un problema. Veamos la interfaz nombrada. Déjame solo darte un
pequeño comentario aquí diciendo cómo exponer submodu Creo que me acuerdo,
vamos a sólo una etiqueta. Esto es una mejora, ¿verdad? Vamos a etiquetarlo como una mejora. Sí, vamos a contar
nuestro primer número. De todos modos, vamos a
etiquetarlo como mejora. Así que solo crea esto vamos a
elegir esto, vamos dentro. Escoge a este tipo que comete. Después CM, luego cierra. Entonces simplemente empujamos esto, llamamos
a esto escaneo,
escaneo cada vez que uso Git
guardianes push Todo bien. Entonces esto es bueno. Comprobemos como eso dije. Sí, eso se ha salvado. ¿Puedo mover esta
pero otra pantalla? Sí. Todo bien. Así que ahora saltemos a Vamos ahora
a saltar al otro servicio. Pero el servicio tomará
alguna coimplementación. Por eso he estado
huyendo de ello, pero sí, aquí estamos. Otro servicio? Sí, cuánto tiempo le decimos a otro
servicio de servicio, entonces eso requirió
X Constructor. Entonces recuerda, puedo traer mi servicio privado de
inventario final privado , servicio
de inventario. A lo mejor puedo hacer esto ahora
y te enseñé cómo. Todo bien. Eso es genial. Ahora tenemos que cablear a este tipo. ¿Necesitaríamos método? Sólo llamémoslo crear
orden o hacer pedido. O simplemente llamarlo permitiría que
esto realmente retorne. Sin embargo, vamos a darle. Devolvemos algo
llamado la orden DTO. Otros DTO. Entonces crea orden, también
estamos tomando el otro DTO No sabemos qué entonces Jaspe. Por favor, no me dé
ninguna otra sugerencia. Estamos creando el otro DTO. Eso estará dentro del
paquete DTO de este tipo de OO. Vamos a crear un
paquete llamado DTL. Vamos a elegir a este tipo. Vamos a crearlo dentro de O DTO. Es una clase. Sí. Este sería un registro de Java. Este sería un registro de Java. Esto será récord ya
que ya estás usando record vamos
a apegarnos a usar registros, ¿verdad? Entonces, ¿qué contendría esto? Esto contendrá privado. Lo siento. Pensé que estaba
usando la clase numérica, usar una cadena, el nombre del cliente, y otros contienen el nombre
del cliente o
debería contener la mayoría. Entonces un
cliente envía un correo electrónico al cliente, luego
también deberías contener inventario, el inventario que
han escogido el inventario que
escogieron de la interfaz de usuario, lo
piensas, deberías
contener una lista de inventar Pero en esta ocasión,
lo que expusimos recuerda lo que expusimos no
fue inventario, sino detalle de inventario, sino impuestos
sobre lo que estamos usando aquí. Este no es el mismo detalle
de inventario. Esto es esto es lo que realmente
entramos desde la interfaz de usuario. Este inventario detalla por
aquí que usando dentro de esto, solo
contenemos
el nombre y la cantidad. Porque solo
queremos ver cuál es el nombre del inventario y cuál es la T. Así que
probablemente debería llamarlo algo así como
todavía quiero darle algo relacionado con el inventario. Probablemente quiera
llamarlo INV DTO, ¿verdad? I NVT No quiero
confundirlo con Inventure DTO porque no quiero
serlo Así que vamos a llamarlo
inventario requestTo. Eso tiene sentido.
Sí. Llamémoslo solicitud de inventario DTO. Eso tiene todo el sentido, ¿verdad? Inventario, solicitud. Detalle. Es diferente del detalle
del inventario que estamos usando. Entonces te diré que transforme
de la
entidad de inventario al detalle de inventario, llámelo a esto solo
llamémoslo inventario DTO, ellos solo lo llaman lista de búsqueda de
inventario Esto está bien.
Creo que esto está bien. No tengo ningún problema
con esto, ¿verdad? Entonces esto es bueno por ahora.
Esto es bueno por ahora. También quiero agregar
detalles extra. Quiero agregar algunos
detalles extra que se van a usar. Solo estoy siendo perezoso, solo
estoy siendo perezoso. Entonces solo quiero
querer regresar Bien. ¿Sabes qué? Sólo hagamos
el trabajo. Hagamos el trabajo. Hagamos el trabajo. También
quiero devolver una respuesta. Llamemos a esta orden respuesta, o respuesta, respuesta DTO Respuesta DTO, entonces esto básicamente debería ser un registro
también debería ser un registro Entonces esto realmente debería
contener el mensaje, el mensaje que
está regresando debería contener solo usando Teja, digamos código de estado, código No sé por qué
estoy usando envoltorio. Entonces creo que podemos
dejar esto por ahora. Podemos dejar esto entonces
podemos volver más tarde para potenciarlo. Yo escogeré esto. Voy a dejar fuera esto de aquí, entonces esto debería
ser. Viniendo aquí. Entonces ordenamos DTO ordenar DTO. Entonces arreglemos este error. Entonces
aquí hay un error. Vamos a solo que no lo sabemos por ahora.
No lo sabemos. Entonces entremos aquí
y arreglemos este error. No hemos creado
esto. Esto va a crear esto. Es un disco. Todo bien. Entonces, ¿qué contendría esto? Es solo que básicamente contiene el nombre de
inventario de cadena de cadena de nombre. Nombre de la invención, entonces
esta contendrá la cantidad int, ¿verdad? Derecha. Eso es. Eso es lo que contendrá. Sí, eso es. Sí.
Creo que está bien. Se ve feo. A mí me gusta. Esto se ve mejor.
Entonces podemos cablear a este tipo. Ya está cableado en entonces lista. Ahora todo el mundo está sonriendo aunque ya no tenemos
nada rompiendo. De hecho, podría hacer la
prueba ahora, pero no deberíamos. Hagamos algo
más significativo antes que realmente empecemos a
ejecutar la prueba. Ahora bien, lo que quiero hacer,
probablemente sólo voy a dividir
algún código pudo aquí. Sólo algún código pudo. Quiero obtener los
Intry por nombre, por nombres, obteniendo
inventarios por nombres ¿Qué quiero hacer?
¿Qué quiero hacer? Estaba recibiendo entradas por nombres. Entonces quiero construir construir y persistir el otro
vamos a llamarlo persistir el lo que digo
construir Solo persista el otro persista el otro. ¿Qué más quiero
hacer? Entonces, quiero construir y persistir la O. Entonces creo que eso
debería estar bien por ahora. Demos esto paso a paso. Vamos a dar esto paso a paso, ¿verdad? Demos esto paso a paso. Todo bien. Entonces hagámoslo. ¿
Cuántos minutos es esto ahora? Esto es de 12 minutos.
Guau. Todo bien. Creo que quiero publicar el video aquí para que
podamos volver. Volveremos en
realidad empezaría a construir
esto. Todo bien. Gracias.
18. Servicio de pedidos 1: Bien. Muy bien, chicos. Estamos de vuelta aquí. Una vez más,
aquí es donde nos detuvimos. Vamos a saltar rápidamente a la derecha. Para no hacer
este video muy largo. Inventario de WG, en realidad
construiríamos construir persistir el orden Creo que también construimos construir y persistir el inventario de pedidos. Recuerda este inventario. Recuerda, sabemos que está en JPA, necesitábamos algo que nos
dijera la conexión entre el inventario
y el propio pedido Inventarios realmente
realizados como un pedido. Esto en realidad nos da
el vínculo entre ellos. Empecemos con esto. Empecemos
comencemos con la derecha. Empecemos sí,
¿cómo vamos con esto? Esto ya contiene
el nombre aquí. Esto contiene a este
tipo, a este tipo. Contiene el nombre
en la cantidad. Para que antes que
nada podamos obtener los nombres. Recuerda que necesitamos los nombres. Entonces, consigamos los nombres. El otro servicio,
e's saquen estos. Así que la lista DoToentTo. Vamos a transmitir TR
deja mapa vamos a mapa. Entonces inventario ¿listaste la referencia del nombre del
inventario, luego lista a lista Así que sí, creo que voy a
llamar a estos nombres de inventario. Nombres de inventario de inventario. Entonces, esto funciona. Así que ahora ya
hemos conseguido esto. Ahora, encontremos el inventario. Entonces creo que debería subpasar
y obtener inventarios. Eso son los inventarios. Así que
ahora consigue inventarios, nosotros esto en ya, solo llama al
servicio de inventario punto fetch all in name, pasando el inventar recuerda Zach está colocando una
lista de cadena, que es exactamente
lo que hemos pasado
aquí y esto debería regresar Esta regresará debe
devolver los inventarios. Int acaba de llamar a este tipo
inventarios. Inventarios. Eso es
cosas buenas, cosas buenas. Siguiente paso,
construyamos el orden. Construyamos el, el
otro invento. Creo que primero deberíamos obtener el
pedido, luego la clave, las claves o las claves primarias que luego usamos para
vincularnos realmente en esto o chico. Vamos a por esto. Entonces, ¿cómo
procedemos? ¿Cómo procedemos? Sí. Así que básicamente querríamos simplemente construir básicamente
queremos simplemente hacer esto. Creo que quiero hacer esto
en un método separado. Hagamos esto, llamemos a
esta orden como una sola orden. Vamos a llamarlo modo y persistir
el orden. Creo que esto funciona. Entonces tomemos DTO. Vamos. Permítame que nos dé algo de espacio para que
podamos hacer esto de verdad. No tenemos orden tenemos el
otro entonces el otro espacio de
excreción o establecer esos conjuntos ID, no, no necesitamos
hacer esto este
generador Roto , esto a generador O identificador porque
queremos un identificador, no el kno primario o identificador
diferente que
creamos la última vez, cualquier otro nombre de cliente Cualquier otro correo electrónico del cliente. Todos estos conjuntos no se establece. Establecer el correo electrónico del cliente.
Entonces, ¿qué más? Creo que tenemos el, o estatus. Otro estatus. Teníamos un status, establecido si, si, set status. Este sería el estado
que concluyera. Así que para ser estatus
que se haya completado. Recuerda,
en realidad se puso en marcha. Míralo. Declarado de que se está abriendo, así
que hazlo concluido. No necesitamos establecer esto
porque esto en realidad
se crearía instantáneamente para Bien, entonces, ¿dónde estamos? escojamos el otro detalle. El otro detalle el otro
DTO tiene el nombre del cliente,
obtuvo el nombre del cliente, otro deToHW no
sabía lo siento mecanografiado Gracias por completar. Entonces solo queremos devolver
el otro repositorio. Necesitamos el otro repositor
entonces solo lo archivamos en. Significa que necesitamos cablear en
el otro repositorio Otro repost, llamemos a este repositorio O Entonces el otro repost consiguió guardar. Ya lo tengo. Impresionante. Ya tenemos
esto. Esto ya funciona ahora. ¿Qué
utilizamos como esto? Usemos un vamos a usar un UID,
UID para identificar Yo sólo voy a crear
el UID final aquí. La cadena final, o
identificador de fuego UUID, UID punto UID aleatorio
hacia abajo Coloquemos esto aquí. Mejor aún. Sólo vamos a
guardar un poco de memoria. Yo solo esto de aquí
y esto funciona. Dile que somos capaces de ver eso. Una vez que consigas esto, una vez que realmente construimos
y persistimos
el, el otro DTO, básicamente, podemos persistir esto automáticamente porque
eso es básicamente lo que necesitamos para el Pero sin embargo, ves
esta identificación regresa aquí, lo que estamos colocando
aquí no sería nuestro vínculo con el
otro inventario, entonces
puedo llamar a esto
aquí para decir, Bien, persista este tipo, ordena el TO. Esto ahora contiene un ID que básicamente solo
usaría
cuando la persistencia es. Probablemente te vamos a dar registro. Yo favorecería usar
ese SLL para J, SLL para J, presione el
registro aquí diga log info Vamos a ver o eso creado. Creo que esto me gusta. Entonces
queremos construir y persistir. Construir. Entonces queremos
construir y persistir. Veamos privado debería ser nulo porque no creo que
tengamos que regresar.
Ya lo averiguaremos. Después construir y
persistir o inventariar. Llámalo o inventario. Yo sólo lo llamo a esto. ¿Va
a ser uno o múltiples? Vamos a salir. Vamos solo para que
ese inventario por ahora. Esto entonces toma en
una serie de cosas. Esto toma en el
texto O DTO en el OTO O DTO. Sólo texto en el
otro DTO también
necesitaría los inventarios que voy a
estar pasando los Por lo que debe ser
DTO de inventario, utilizando DTO de inventario. ¿Dónde está otra vez? Oh,
esto es detalle de inventario. Inventarios,
básicamente, esa será la lista de inventario DTO Necesitamos lista de detalles de
inventario para este DTOs de inventario Inventarios, bien. Esto está bien porque sabemos que
contiene el inventario. Simplemente no
querías exponerlo. Entonces también estaría recibiendo
una cadena o identificador. Y luego el fuego,
entonces ¿qué más? Entonces la cantidad, ¿verdad? El monto. Veremos para qué se utiliza
esta cantidad, ¿
verdad? Veremos para
qué se utiliza. Vamos a usar
Te mostraré usar una lista. Al final del día,
probablemente necesite un pulmón atómico, ¿
verdad? Tengo que hacerlo. Cantidades pulmonares atómicas.
Cantidad larga. Todo bien. Entonces, ¿cómo se supone que va a ir
esto? En primer lugar,
quiero definir cuál es la lista de inventar
realmente persistente Orden Evento, orden evenge. Ada inventa el chi, Ada inventa el chi, queso
Avent, creo que debería
cambiarle el nombre a On Sí, queso Odín. Entonces tenemos una nueva lista de matrices, lista Arey que
mostramos el tamaño será
exactamente del mismo tamaño Recuerden, cada uno de ellos se
persistiría individualmente, ¿verdad? Entonces porque persistimos
individualmente, así que solo podemos elegir la talla Entonces estamos seguros
del tamaño. Entonces no quiero que
solo vaya indefinidamente. Así que el tamaño de la
matriz queremos salir. Después escojo los inventarios. Inventarios entonces para cada uno, ¿cómo es que este tipo
solo me está leyendo la mente? Oye, ¿estás bien? ¿Autocompletar? Por favor,
no leas mi mente. Después creo un nuevo inventario
de pedidos. No tengo ningún
otro inventario. Un nuevo inventario o
inventario entonces. Entonces escojo el pecado. ¿Estaría haciendo
un bucle múltiple? Estoy tratando de proporcionar
el bucle múltiple. Creo que eso
funcionaría. Ahora mismo, vamos a crear otra estrella
privada privada. Sólo
llamémoslo inventario DTU. Inventario déjame pensar tres bits. Déjame
pensar tres pedacitos. T t bits, picadura verdadera, picadura verdadera dejándote
, dejando tu. Picadura verdadera. Estoy
tratando de darte una idea. Déjame hacer una pausa en esto un poco, pensarlo un poco. Voy a volver. Soy capaz de recoger mi pensamiento. Vamos a necesitar el
inventario solicitado. Todo se
unirá ahora. Entonces lo llamamos obtiene Inventario
solicita detalle por nombre. Creo que esto funciona. Entonces
crearé un errata, luego eso es cadena,
luego nombre de inventario Después pasamos en la lista de inventario solicitado tenemos inventario solicitado a tenemos. InventryRquest it lista. No, no, no, no, no, no
quiero mezclarlo. Llámalo inventario, lista DTO. Es un conflicto
con el otro que tenemos allá. Todo bien. Entonces, ¿qué haríamos entonces
? Esta
sería simplemente lista de solicitudes de inventario. No, no estoy haciendo para cada uno, y voy a transmitir a través
voy a transmitir a través,
luego voy a filtrar. Estoy filtrando a través de
cada uno para ver si este tipo el nombre del inventario es igual a este nombre de
inventario, ¿verdad? Quiero poder
determinar que estoy recogiendo el inventario exacto
de esta lista, ¿verdad? Así que recuerda, esto devolverá una lista de inventarios para
usar detalle de inventario No giramos la lista de inventarios en base a
los nombres o pasados Ahora mismo, estoy
tratando de determinar si el inventario
solicita estos datos aquí, este nombre que nos has dado
coincide con esas partes. Si coincide con alguna de las
invenciones que nos son dadas, entonces conocemos la cantidad
realmente solicitada. Creo que debería pensarlo
más lentamente porque alguien
podría estar confundido. Bien, así que lo
pienso así. Estás haciendo un pedido, ¿verdad? Entonces, mientras haces un pedido, la interfaz de usuario habría
escogido algunos detalles, habrías escogido
algunos inventarios Básicamente solo
necesitas enviarnos el nombre y la cantidad de
la cantidad que estás recogiendo. Puedo usar el nombre para resolver qué inventario básicamente es
un nombre de inicio, luego podré
asignar las cantidades a ese inventario de
inventario
en particular en la tabla de inventario. Eso es exactamente lo
que estoy haciendo aquí. Estoy tratando de usar el
nombre que se pasó como una orden para
crear realmente una orden. Ahora estoy intentando,
tratando de revisar esta lista que se
proporcionó que
realmente creamos para
ver qué inventario de la tabla
coincide con ese nombre. Eso es exactamente lo
que estoy haciendo aquí. Entonces por eso estoy
comprobando el nombre. Creo que eso funciona. Simplemente puedes pausar el viento
e intentar escucharlo
supongo que puedes averiarlo en caso de que me publicaran demasiado rápido. Entonces van a encontrar primero. Entonces de lo contrario solo
devuelve no por ahora, lo
contrario, no existe. Qué más no, giramos esto. Todo bien. Con eso hecho, entonces
podemos entrar
aquí por cada uno de ellos. Lo que hacemos entonces es
que podemos obtener el inventario positivo por lista pasando el nombre del inventario, pasando el inventario actual. ¿Cómo se llama ahora? Inventario. Llame a este inventario obtener nombre, luego pasando el pedido. Creo que deberían
ser listas de Inventarios. ¿Correcto? Sí. Sí. De hecho me dirijo a nosotros el
evento DT, tenemos esto. Esto coincide, eso es
lo que estamos usando. Entonces con esto hecho, entonces podemos elegir la otra eventry que
realmente creamos Ese es este otro
eventr que creamos. Escoge este que establece el otro ID
para que coincida con el otro ID. Otro ID. ¿Cuál es la otra identificación? Qué otro ID. El otro identificador. Este identificador que
usamos aquí, ¿verdad? Sí. Este identificador
que usamos aquí. Todo bien. Entonces, ¿cuál es el lugar dscrepancia
en una cadena aquí ¿Qué usé? ¿Qué
usé? Vamos a confirmar. Vamos a confirmar. ¿Sabes qué?
Vamos a cablear esto rápidamente. Volvamos aquí.
Quiero terminar este método así que no quiero dejar que
este video se alargue demasiado. El otro inventario, luego establecer ID
de inventario, luego inventario. Inventario, luego ID.
No consigas la identificación. Luego inventario de inventario,
luego la cantidad establecida. La cantidad es entidad dt a cantidad. Int, a ¿Estoy mezclando esto ahora? Lo siento, debería estar usando. Este es el inventario. El tipo DTU. Las DTU de inventario obtienen cantidad. Eso es lo que debería estar usando. Entonces entonces necesitamos el precio. Entonces podemos hacer un precio total
largo. Será el inventario
será inventario dT, inventario DTG precio, precio, uh, entonces podemos multiplicar por el
inventario, igualar por nombre Vamos a llamar a
inventario igualsit. Esto se está volviendo absurdo.
No es esto por su nombre. Bien, así que vamos a colocar esto. Creo que eso es bastante distinto. Entonces eso es obtener cantidad. Eso nos da la cantidad
total, ¿verdad? Después el otro inventario, luego bajar cantidad precio. Recuerda, hicimos esto, luego
colocamos aquí este precio total. El precio de los datos del lugar aquí. Entonces tenemos los
otros inventarios. Luego los otros inventos
que aquí definimos, luego agregamos en este
otro inventario Entonces tenemos una
cantidad porque
sabes que la cantidad va en aumento.
La cantidad va en aumento. Déjame comprobar la duración
de este video ya. Esto ya son 17. Chicos, vamos a posar esto aquí. Volvamos.
Volvamos. En el siguiente video. Gracias.
19. Servicio de pedidos 2: Bien chicos, gracias. Gracias por acompañarme
una vez más. Esto es Z aquí. Sí. Con esto a, entonces recuerden que tomamos un préstamo atómico queremos hacer un
seguimiento del monto total, que es este precio en realizar un
seguimiento
del monto total, solo usado y sumar y
obtiene, precio total. Yo sólo puedo bucle
nos da esta cantidad total. Entonces se puede hacer un seguimiento dentro de este
método para ver esto, ¿verdad? Entonces después de que hayamos terminado con esto, solo registre algunos detalles. Sólo voy a decir, que son las
invenciones Qué inventarios Asistido. Sí, esto funciona. Entonces solo puede hacer el otro
inventar. ¿Queremos entrar a ese tipo? No. La otra postura de inventario. Recuerda, estamos haciendo esto
porque sé usar JPA. No queremos usar esos
detalles porque si
lo hacemos, se va a unir
apretadamente y queremos evitarlo. Después CBO. ENTONCES? Guarde
todo esto. Todo bien. Entonces, volvamos a esto. ¿Qué hice aquí? Todo bien. Estaba tratando de
pasar el pedido, el ID de pedido o el identificador. Tu identificador
debe ser una cadena. ¿Por qué usé un largo aquí? Esto definitivamente es un error. ¿Por qué usé un largo aquí? Eso es llamar a la preocupación. ¿Por qué usé un largo? Ahí. Pensando en por
qué usé un largo ahí. Mirándolo una vez más. Mm Oh, si, si, si, ya, ya.
Ya lo he averiguado. Entonces me equivoqué un poco. Necesitamos la identificación. Esa es la identificación. Este no es el identificador. Creo que me estaba
superando a mí mismo. Esta es la identificación. El ID de la persistimos
antes, este ID, por lo que queremos vincular
al inventario dentro de esta
otra tabla de inventario Es el ID al
igual que la forma en que
muchos a muchos funciona cuando usas el ID para realmente vincularlos a
ambos. Eso es exactamente lo
que estamos tratando de hacer aquí. Creo que eso está claro. Nosotros colocamos esto aquí. Bien, así que pasemos por esto. Esto puede ser un poco complicado
saber lo que estoy haciendo aquí, pero vamos a repasarlo una
vez más para que podamos En primer lugar, entendemos esto como esto persiste bastante
sencillo Lo que estoy tratando de hacer aquí es, estoy tratando de escoger para este
pedido que se creó. He creado un pedido, ¿verdad? Quiero vincular el
ID de este pedido a cada inventario
que realmente se compró dentro de la
otra tabla de inventario. Y eso o tabla de inventario está sirviendo a nuestros muchos a muchos. ¿Verdad? ¿O debería decir uno de los
demasiados que esto se mueve? Entonces es unirlos a ambos
. que podamos saber por cada ID, cuántos inventarios hiciste por. Oh, compramos este
Inventure con este precio, esta invención con este
precio, esta invención con este precio. Entonces eso es
lo que estamos haciendo aquí. Entonces a través de nosotros
empezamos por mirar a través toda la invención
porque los inventarios
realmente determinan el
vínculo aquí, ¿verdad? Tam usando. De hecho, miramos a través de otros eventos
demócratas. Ahora estamos tratando de
persistir en cada uno de ellos. Creo que esto es lo que establecemos la identificación. Este ID es el otro ID, que es el ID
que se escribió. Fui creado por la mesa, que colocamos aquí.
Entonces eso es lo que hicimos. Entonces este tipo básicamente es
lo que
te expliqué antes, intentas crear un
pedido desde la interfaz de usuario. Solo eliges los nombres
del objeto del
inventario que deseas. Entonces estableces cuántas cantidades quieres para cada uno
de los inventarios. Entonces solo el nombre y las
cantidades pasan al back end, luego el back end luego lo recoge. Usa ese nombre, pasa por
la lista de inventario que está disponible en la tienda o
disponible en la base de datos. Una vez que ve eso, entonces toma la entidad misma
de la tabla, recoge todo ese registro. Entonces es ese disco que
en realidad regresas aquí. Reproduce todo ese disco,
y es ese disco, ahora
estamos tratando de
querer vincular, qué disco pertenece a qué nombre? Entonces eso es
lo que estamos haciendo aquí. Eso es lo que estamos haciendo aquí. Entonces por eso ves que
tenemos esto aquí. Voy a tratar de ver, ¿cuál pertenece a cuál?
Entonces por eso lo hago. Por eso ves,
pasamos por la solicitud
la lista de solicitudes. Para cada una de las solicitudes, ¿
este nombre coincide con este nombre? Alguien que coincida con este nombre aparentemente le pertenece,
entonces lo afinamos, ¿verdad? Entonces por eso el primero o
que coincide, luego lo afinamos. Entonces una vez que lo encuentras,
entonces simplemente seguimos adelante y simplemente persistimos esto
para simplemente persistir. Así que recuerda, inventarios, este inventario DTO es sinónimo de nuestro
inventario Recuerda, no queríamos
exponer aquí mismo. Pabla debería regresar.
No queríamos exponer a este tipo de inventario. Así fue como creó
este acuerdo de inventar. Este detalle de inventario es
lo mismo que este. Entonces puedes asumir que esta
es la propia entidad. Este es el nombre que
estamos tratando de comparar con el orden que
en realidad era el nombre de
la orden, ¿verdad? Y vamos a explicar.
Necesito explicar esto una vez más para que en
realidad no nos equivoquemos. Y por eso lo estoy haciendo. Entonces una vez que hayas
podido averiguar,
Oh, este es uno que coincide
que va a elegir esto. Entonces entonces en este lugar la
identificación de este inventario. Esto va a coincidir con el lugar el ID y la cantidad
que se solicita, que se encuentra dentro de este
y el pedido que se realizó. Después sumamos esto juntos. Entonces obtenemos el
precio total, el precio total. Después hacemos un seguimiento
de la cantidad total que va a para
este único pedido. Así como queremos
pagarle al cliente, yo estaré pagando a los clientes, si el cliente quiere
pagar, usted estará pagando no cada inventario por
tiempo, sino el monto total. Eso es lo que estoy tratando de
agregar y llegar hasta aquí. Entonces al final del
día lo guardo todo. Sí, eso es bastante
trabajo,
escalamos, escalamos a través. Con eso realmente hecho,
entonces puedo entonces escoger, luego
puedo construir construir y
persistir o persistiría. Yo sólo veo esto. Rad y
persistir el inventario, San co construir y
persistir el inventario, que toma en el TO
toma en los inventarios Toma en los ID, cómo ordenar que obtener ID
se tarda en atómico largo. Entonces queremos rastrear
con log atómico. Entonces Aon no es normal. La razón por la que estamos
usando atomic long porque varios podrían
estar sucediendo uno, ¿verdad? Esto realmente te ayuda a realizar un
seguimiento correcto, ¿verdad? Entonces por eso estoy usando log
atómico porque si
usas uno normal, te muestro a lo que me refiero. Largo atómico, llama a esto Cantidades. Llama a estas cantidades, y
eso es lo que estoy pasando aquí, ¿verdad? Todo bien. Entonces, supongamos que no es
un largo solo un largo. ver qué pasa. ¿Ves? Ahora hagamos mucho tiempo. Vamos a limpiar esto. Hagamos cantidad más luego solo hagamos
precio total precio total. A ver qué dices. ¿Ves? Variable usando Lambda debe
ser efectiva final, ¿verdad? Debe ser final efectivo final porque está usando la expresión
Lambda. Como resultado, puedo usar un longus atómico que en realidad
garantiza a un tipo porcino Este tipo solo usa pulmón atómico, entonces este puede ser el
tipo final si quieres. Eso funciona bien. No
creo que sea necesario. Yo solo defino esto como una final, entonces solo miro a no
debería y estamos bien. De hecho, hemos podido hacer esto. Hemos podido persistir, y creo que podríamos
probar esto, ¿verdad? Tenemos que probar esto que hemos construido hasta ahora, no lo hemos probado. Volvamos en el
siguiente video para
probar esto realmente para ver qué
hemos creado, hasta ahora. Entonces ahora danos una respuesta. Entonces, permítanme construir alguna
forma de respuesta por
ahora para que porque solo
una nueva respuesta. Entonces mensaje, digamos
orden actualmente procesada. Entonces di que es código. Vamos a darle
uno o dos, ¿verdad? Uno o dos. Seguro que
sabes lo que es 12. Volveré en el siguiente video. Eso se lo voy a
explicar. Todo bien. Gracias, chicos. Siguiente video.
20. Servicio de pedidos 3: Bien, chicos, gracias por
acompañarme. Esto es Z aquí. Bien, entonces, mencionaste, creo que
me detuve aquí, uno oh 212 solo significa
procesar, ¿verdad Si revisas el
código de estado HTP Código de estado, significa que básicamente todos los
serbios aceptaron la solicitud, pero sigue siendo de procesamiento público
y no está terminada Entonces por eso usé uno oh dos. Se ha procesado. Bien,
así que vamos a probar esto. Y cómo probamos
esto, ¿verdad? No quiero crear
solo crea el
controlador con este tipo. El controlador hará
este tipo, llámalo orden. Controlador o cable de regreso que persistirá esto como el t. Entonces vamos a descansar controlador
requerido constructor, luego el privado, servicio final, entonces vamos a ver Entonces público o respuesta, o entidad de respuesta D de respuesta,
entidad de respuesta. Eso es física dentro, luego
Creta, luego esto funciona. Usarán un cuerpo de solicitud como cuerpo solicitud y solo lo
pasarán DTO TTO, este tipo que DTU Entonces solo regresa una nueva entidad de respuesta de noticias. Entonces éste lleva el
paso del cuerpo. Esos serían estos
puntos otros DTO, luego HTTP status dots fine Todo bien. Ahora tenemos esto y hagamos esto
en post post map it. Vamos a darle un genérico
en Quest Quest mapping. Theis debería ser yo solo lo llamo vestir este
camino. Vamos a llamarlo orden. Luz, llamémoslo orden. Entonces llamemos a esto directamente, y tenemos lo mismo. Bien, así puedo hacerlo. Esto es un sí. Entonces se trata de solicitudes HTTP. También está utilizando clientes HDD. Los clientes HDB
también pueden trabajar para nosotros, así que te contamos clientes HDB
clientes HDB Entonces usemos clientes HT. Entonces ya creaste para mí. Entonces esto es que no necesito
usar post uno de los trabajos de Coton. Entonces, si usas alguno, te sientes
cómodo con él, solo
usaré clientes HP. Eso debería en realidad, creo que ya
creaste algo aquí. Oh, sí, tengo algo aquí. Así que vamos a usar a
este tipo, ¿verdad? Tengo a este tipo.
Creo que estaba probando esto antes en el proyecto que construí. Tenemos esto para que podamos
ejecutar esto directamente. Por favor, recuerde el nombre. Veamos el nombre. Vamos a L's. Vamos a saber lo que estás escogiendo.
¿Dónde coloqué esto? El proyecto ya está en marcha. Déjame ejecutar mi redacción, vamos a permitir que este tipo siga
corriendo en segundo plano. Todo bien. si está listo para comenzar a
aceptar conexiones. Sí, está listo. Vamos a darle a esto otra vez. Sí, ahora mismo,
saquemos esto. Llevemos esto a un
lado, asuma esto. Sí. Tenemos gobernante. Tenemos una regla, tenemos un libro, tenemos un libro, entonces
pongamos aquí un lápiz. Pongamos un lápiz. ¿Todo bien? Entonces, si todo funciona bien, si no has roto
nada, voy a correr esto. Esto debería pasar
esto a la base de datos. Entonces nombre del cliente,
mi nombre es Zeko. Bueno, déjame
usar mi apodo Z,
Z Zico Z o Zeko Vamos a empujar esto y ver qué pasa si
no has roto nada No sé por qué
tengo esto todavía. Entonces, ¿por qué ya no necesitas esto? No necesito esto. Creo que apuesto algo diferente entonces. Vamos a darle a esto.
Veamos qué pasa. Bien. Entonces esta es
conexión rechazada. ¿Por qué se niega mi conexión? A ver. ¿Este tipo está
corriendo? Espero que no. Uh, ¿cuál es el problema? Así que vamos a confirmar desde
la propia aplicación. Oh, lo siento, la aplicación no
se está ejecutando. Así que vamos a ejecutar la aplicación. Sé que hay un cliente de Cesippi, así que vamos a ejecutar la
aplicación. Bien. Se acerca
la aplicación. Bien, así que vamos a golpear esta conexión ya no
debería ser rechazada.
La conexión no está arriba. Me gustaría aclarar
esto en caso de que
haya algún error. ¿Verías? Confía en mí, siempre anticipo
errores como desarrollador, anticipo errores para
que tengas un buen código. Así que solo golpea esto. ¿Qué pasa? Error de Internet. Guau. No esperaba ese tipo de error.
Eso es hash, hombre. Los pozos de nivel en serio hash. Bueno, vamos
a ver qué pasó. Vamos a la ventana redonda. Entonces qué pasa, no se puede invocar lista porque el valor de retorno,
bla, bla, bla, bla Este tipo es nulo. Entonces,
veamos a este tipo, tú diciendo que la otra lista de
inventario de obtener es no. ¿Cambiaste el nombre? Bien, vamos a confirmar. Entonces usamos inventarios, aquí. ¿Y qué esperábamos aquí? Lista Inventi. Veamos a este tipo.
Guau. Este es el tema. Entonces se supone que debes tener lista de
Inventure. Inventar lista Sí, así es como se
supone que debe verse, ¿verdad? Así que recordemos,
esto debería estar bien. Solo recordemos
esto el tuyo. Acabo de volver a ejecutar esto otra vez. Bien, todo
funciona con éxito. Tenemos un mensaje sobre esto, vamos a confirmar en la tabla de
la base de datos. Comprobemos nuestros pedidos.
Sólo un pedido. Impresionante. Impresionante.
El nombre es EZCow El correo electrónico es testa tester com. Entonces cuál es el evento
Eventriy sigue siendo el mismo. Entonces confirmemos
la relación. Sí, mira, la
relación serpentea. Genial, genial. Esto es genial. Esto es genial, hombre. Es genial. Es realmente genial.
Tenemos una relación. Significa este inventario
a este pedido Recuerda, este es el primer registro. El número de pedido es 1111. Es la invención, y
esta es la cantidad, por lo que podemos entonces al parecer estamos haciendo un seguimiento
del precio total. Yo este tipo, más el
precio del inventario. Eso es lo que tenemos
aquí. Bien, entonces creo que hemos hecho un buen trabajo. Buen trabajo, buen trabajo, buen trabajo. Bien, hemos sido capaces de
lograr algo bueno. Todo bien. Terminemos el video aquí. Y cuando
volvamos, veamos algunas cosas más geniales. Gracias.
21. eventos: Oigan, chicos, Zico aquí otra vez. Todo bien. Creo que esto
se está poniendo interesante. He estado hasta este momento, nos han probado con
muy sencillo, estamos explicando
muchos conceptos. Ahora hemos podido
crear el pedido, hemos podido persistir
el inventario de pedidos, poder conectarlo desde
la base de datos de inventario, y estamos en un buen lugar en este momento,
estamos en un buen lugar. Ahora, volvamos al núcleo
de este curso,
que son los módulos de resorte. El núcleo de estos
cursos, si queremos transmitir datos de uno aunque queramos transmitir datos de un módulo a otro, utilizamos eventos, ¿verdad? Esa es la totalidad de
las lecciones. He explicado que la primavera modular
nos hace que tengamos que usar eventos De esa manera, si estás desacoplando el servicio y pasando a un proyecto
separado por completo, con poca o ninguna
configuración podríamos simplemente sacar un micro servicio
u otro servicio
a partir de eso,
¿ u otro servicio
a partir de eso, Entonces eso es exactamente lo
que vamos a hacer aquí. Entonces ahora mismo,
sin más preámbulos, vamos a crear
otro servicio de eventos. El otro servicio de eventos
O gestión de eventos. Administración, llame al otro servicio de
gestión de eventos ,
sea cual sea su nombre. Es una gerencia.
Es un servicio que cierto vamos a llamarlo servicio. A veces la
convención de nomenclatura puede ser. Vamos a llamarlo
otro servicio de eventos. Esta es la guía de
nuestro evento gestionar. Debería ser un servicio
requiere constructor. Usemos un TSLA four J
en caso de que necesitemos registrarnos. Entonces ya que estás
enviando un evento, ¿verdad? Necesitamos un editor de
eventos de aplicaciones. Necesitamos un editor de
eventos applici, luego enviemos un evento El otro enviaría un evento
al módulo de pagos. Él paga, esta es la orden que se
creó, tráela. Entonces en tal caso, el cliente realmente envía, luego va al pago. El pago puede ser
recogido y guardado. Ahora bien, ¿cómo harías esto
probablemente en el mundo real? En el mundo real para
ser un caso de que tengas tus datos en la
tabla, los envías. Una vez que lo envías, los
eventos eventos van a los pagos, el pago se persiste en la
base de datos una vez
peristeado en base de datos, luego cuando el usuario realmente completa el
pago, por así decirlo, el monto total se
paga desde la UI, derecho, con la tarjeta o con alguna forma de
pago ¿Correcto? Entonces eso puede
activar el servicio de pago. Entonces el servicio de pago
puede entonces entrar a la base de datos, recoger el ID como realmente se usa, azotarlo y
completarlo, ¿verdad? Entonces estamos transmitiendo eso, ese puede ser el
escenario típico que quizás quieras usar. ¿Todo bien? Bien,
así que procedamos. Vamos a hacer un pedido completo. Entonces quieres completar la O. Así que en esta ocasión, estarás creando un DTO nos
estaremos enviando
estaremos enviando un DTO
al pago al pago Entonces llamémoslo pago DTO. Sí, estoy deliberando
nombrándolo pago. Llamémoslo Otros
pagos DTO. Eso se ve mejor.
Otros pagos. Entonces parece un puente
entre ambos. Otro pago DTO
Ordenar pago DTO. Bien, entonces está bien. Entonces lo que entonces
hacemos es simplemente llamar
al editor del evento, eventos
publicados. Publiquemos a este tipo.
Hola. Entonces solo publícalo. Entonces, ¿qué contiene este tipo? Probablemente solo haga de este
tipo un disco, ¿verdad? Debería ser un disco.
¿Para que sea un disco? Sí, hazlo un registro y
simplemente pasando la cadena, o ID y luego pasando
las cantidades totales esa cantidad total que
realmente usamos el otro llega a usar realmente. Entonces podemos entonces implementar
su no necesario. Es como decorador decir. Eso solo implementa eventos
de dominio. Eventos de dominio. Verificamos eventos
de dominio. ¿
Qué contiene? Es solo de moléculas J. Eso es que
en realidad creo. Si haces clic en esto,
esto es solo una parte de Jmlecle que estaba cableada
con modulados de resorte Entonces solo se usa en
la documentación. Lo encontré fantasioso
yo también lo usé. Pero esto no es realmente
obligatorio, ¿verdad? Sólo tengo que mencionar
que no es obligatorio. Bien, así que en realidad hemos
podido hacer esto. Entonces le paso la identificación a este tipo. Entonces esto ahora se crea. Entonces esto es WidingT ya no
se queja, no hay errores. Entonces eso ya no
se queja. Así que vamos a hacer un registro para que
podamos usar para rastrear la información de registro. Entonces digamos completar
completar otros pagos. Completando otro pago, sí. Con detalles detalles
detalles. Grúa. Bien, creo que
debería funcionar, ¿verdad? Es decir que estás publicando,
necesitamos un oyente. Ese es el punto.
Necesitamos un oyente. No podemos publicar sin
tener oyente. Debe haber un
oyente. Cuando publicamos, debe
haber un oyente Vamos rápidamente saltando al servicio de pago y
al módulo de pago
que quería decir, luego creamos gestión de
eventos de pago o gerente o servicio de
eventos de pago. Simplemente lo llaman servicio de
eventos de pago que gestiona o evento o que escucha los eventos. Ellos
solo llaman eventos. O es sentido o escucha. Llamemos a este oyente de eventos, servicio de eventos de
pago. Simplemente llaman a este pago. Evento. Servicio, mismo en SLO J al servicio en requiere
constructor. Todo bien. Tenemos ese cableado. Para este tipo,
necesitamos el repositorio al parecer porque
seremos decentes persistentes. Entonces no quiero reventar la burbuja aquí,
pero esto es muy clave. Esto es muy importante,
chicos, por favor amablemente presten atención. Aquí recibiendo los
demás pagos DTO. Los demás pagos DTO. Algo debería venir a
tu mente de inmediato. He cruzado modelo, ¿verdad? He cruzado un modelo. Ahora estoy
buscando a este tipo y este tipo está dentro
del otro servicio, sabes que esto se va
a quejar, ¿verdad? Esto definitivamente
va a quejarse. Porque sabemos que se
va a quejar, sabemos exactamente lo que
tenemos que hacer, ¿verdad? Debido a que esto se
va a quejar, demuestra que
en realidad necesitamos exponer esto
es sub paquete. Lo que hicimos por inventario, tenemos que exponer esto, ¿verdad? Así que básicamente podrías simplemente escoger el otro
detalle de pago solo y colocarlo al exponerlo porque estos
tipos no son usados, ¿verdad? Entonces si te gusta exponer la calidad, pero solo voy a exponer
todos los detalles porque
realmente no están haciendo nada. Cualquier cosa debería decir
reservada o algo así. Así que solo colocaré esto aquí, solo crea los paquetes
info Parking ger info, quiero exponer a ese tipo. Yo solo lo llamo a g. Recuerda la interfaz de nombre a la
que te diriges, g, spring framework, module
it, la interfaz de nombre. Recuerde interfaz debe ser lo que el nombre de la interfaz
supongo, que es DTL Esto es. Básicamente
esto es todo. Si estás exponiendo, tenemos que decirle
al pago que oye, espera un chico de mi parte.
Espera algo de mí. Mencionamos que
hay que esperar, eso es respeto y
cómo se espera en g g el framework de primavera, el módulo el modelo de
aplicación, luego las dependencias permitidas,
que es una lista, y esto debería estar esperando
lo que deberías estar esperando del módulo DTO, luego el sub estado de ánimo D TO Estoy seguro de que está claro chicos. Eso es exactamente lo que
hicimos del otro lado y esto debería
funcionar adecuadamente. Ahora, antes
haríamos algo por mí, solo
hagamos nuestra prueba. Vamos a estar seguros de que una prueba no se
ha roto, chicos. Recuerda esto es recordar que
este es el carbón. Siempre tenemos que probar porque movimos
mucha pieza alrededor, así que muchas piezas alrededor. Necesitamos saber si
nada se ha roto. Seguro que sabes que
esto se rompe, ¿verdad? Creo que ustedes
conocen este descanso. No se rompe. Todo bien. Entonces ahora siendo capaz de
lograr esto, bien. Pudieron mover
cosas porque
ya le dijimos a este tipo de
dónde viene, va a, y
las cosas están bien. Ejecutemos a este tipo aisladamente. Pagos Vamos a revisar
la papelera, ya ves. No se espera ninguna
dependencia, ¿verdad? Pregunta será alguien
que me pregunte, ¿no? Por qué dijiste por qué estás usando
la prueba del módulo de aplicación, debería tener la dependencia directa de la
pista de arranque. ¿Por qué simplemente no romper?
¿Sencillo? ¿Es la papelera? Si lleva ese servicio, realiza tu psitre si lleva un controlador o
lleva un componente, si es un bin sí se romperá Pero si no es una papelera, no
se romperá. Volvamos a hacer rápidamente
esa prueba. Esto es lo que estamos exponiendo. Vayamos al otro servicio. El otro servicio está
marcado como público. Intentemos deliberadamente trasladar
esto al servicio de
pago. Hagámoslo. Entonces para que entiendas que tiene que ser un servicio para que rompas. No es un servicio, no se
romperá, ¿verdad? Eso es lo que en
realidad estoy tratando de enfatizar aquí. Vamos a ejecutar esto. Ejecutemos
esto, volvamos a ejecutar esto. Para el servicio de pago ahora
ahora estamos cableando en una Papelera. ¿Ves? Esto se rompe.
¿Qué dice? Si lo miras correctamente. Módulo, esto depende este tipo y
¿de qué depende? Depende de esto,
esto, este, este otro servicio porque es una papelera. Tenemos que
obtener la diferencia. Si estás cableando solo en el simple detalle, no pasa nada. Pero si estás haciendo eso, en
realidad se romperá. Recuerdo que sabes
cómo arreglar esto. Si quieres arreglar esto, quieres cablear esto en solo
usas esa dependencia directa de
boosra,
pero no estamos haciendo eso Yo sólo entro aquí porque ni
siquiera estoy exponiendo esto
en primer lugar. Estamos enviando eventos, ¿recuerdas? Yo así que estoy seguro que es Claire.
Nosotros hemos podido hacer eso. Entonces, volvamos a ejecutar
esta prueba, y esto no debería
fallar. Toma los yoes. Esa es otra vez, perdón.
Esta es otra vez. Mal. Esto no debe
romperse. Bien, a través, a través, a través
Solo verifiquemos
eso rápidamente . No se rompe. Bien. Este video se está
haciendo muy largo. Así que he podido hacer
algunas cosas críticas aquí, así que
volveremos al siguiente video para continuar de lo que
paramos. Gracias, chicos.
22. Evento 2: Oigan, chicos. Un placer
tenerte de vuelta conmigo. En Angina, cuando en
realidad tratamos hablar con nuestros amigos, platicar con nuestros amigos
y nuestros compañeros buenos deseos y probablemente conseguir una fiesta. Necesitamos mucha
gente. Probablemente estés solo oye mi gente. Oigan, chicos, arte,
procedamos desde donde empezamos. Ahora estamos enviando algo
del otro servicio, estamos publicando un evento. Necesitamos un oyente.
Lo estamos publicando de este tipo.
Necesitamos un oyente. ¿Cómo escuchamos? Ahora, hay una regla que se estableció si
estás usando módulos de resorte. Si eres si estás tratando de
enviar un evento, ahora,
piensa en esto. Piensa en esto, ¿verdad?
Envías un evento aquí. Entonces esto es algo que es documentación que puede
ser un poco complicado de conseguir, pero quiero explicarlo de
una manera muy sencilla, ¿verdad? Estás tratando de enviar tratando de
firmar un detalle, ¿verdad? Al parecer, esto lleva
algunos datos, ¿verdad? Y porque estás
tratando de enviar los datos, tiene
que ser
transaccional, ¿verdad Son los
datos transaccionales, ¿verdad? Entonces, porque es transaccional, porque en realidad es
transaccional, uh, es más como una canalización,
una canalización por la que estás
tratando de pasar datos Porque esto es transaccional, ahora la siguiente pregunta que entonces te haces es cuando la estás escuchando, ¿quieres escucharla
sincrónicamente Porque los eventos son de naturaleza
sincrónica. ¿Quieres
escucharlo sincrónicamente? Si escuchas sincrónico, puede pasar
cualquier cosa, se puede romper, ¿cómo
quieres escucharlo? Probablemente quieras, yo
quiero escuchar esto, pero probablemente lo
estaré escuchando. Probablemente lo estaré
escuchando
probablemente usando un oyente de
eventos, un oyente de eventos, ¿no usarás un oyente de eventos Quiero usar un oyente de eventos que realmente venga a través,
Oh, tenemos un
oyente de eventos, Entonces también quieres decir, quiero ser un fregadero, ¿verdad? Para que esto
realmente pueda funcionar para que no se rompa en el s. Pero esto realmente
te introduce teniendo varias
complejidad o
quieres usar una transacción
un oyente de eventos transaccionales, Quieres un oyente de
eventos transaccionales. El punto de
escucha de eventos transaccionales en una sincronización. Entonces Spring Modulate ya nos
da un alias
para todo esto, ¿verdad? Un alias para ayudar a gestionar esto. Y esto es lo que se
llama aplicación AT AT. Modelo de aplicación oyente. Un
oyente de modelo de aplicación. Vamos a inspeccionarlo. Verás, ahora es una transacción. Yo se enchufa el viejo. Recuerda, la propagación
tiene varios de ellos. Utiliza soporte
obligatorio requerido. Yo apoya básicamente decir si hay una transacción,
por favor use la. Obligatorio solo uno, pero si
estás usando requieren nuevo, se cortará de
la transacción antigua y creará una nueva transacción
para trabajar realmente con. Yo necesitaba llegar tan temprano. Esto crea una nueva
transacción en su totalidad que no
es que sea
diferente del evento que la envía. Con esto hecho, a
qué tiende esto entonces solo
podemos imprimir. Imprimamos para ver al
oyente recibido. Escucha. Recibido.
No se recibe, esto entonces, pasemos
el pago a usted. Vamos a usar un registro. ¿Por qué estoy
usando un sistema que da salida? Vamos a usar un registro. Entonces digamos otros
pagos recibidos, es otro pago recibido. Quiero algo en oyente. Tiene algo en oyente. En oyente. Genial. Volvamos a
disparar este evento. Veamos si realmente esto recibe los eventos.
Tenemos que confirmarlo. Recibir evento, no
recibe el evento,
entonces, ¿por qué estamos
aprendiendo el modo primavera Lo que haría, voy a
iniciar la aplicación. Comienzo de la aplicación. Mientras esta puesta en marcha
voy a mi solicitud de HTP? ¿Dónde está ese tipo? Yo sólo puedo
ir desde el Contralor. Tenemos esto ella
siempre está bajo rasguños. Creo que esto. Yo tengo esto. Sólo quiero
cambiar esto un poco. Vamos a codificar esto solo
cambia tu nombre. Z uno, algo un poco
diferente al primer cliente, Prueba uno, Prueba uno, Prueba uno en test.com Mantengamos igual a los demás. Vamos a disparar esto. Veamos qué pasa.
Bien. Entonces esto procesa. Vamos a revisar los registros. Vamos a revisar los registros. A vamos a revisar los registros. Entonces o inventario, ¿verdad? Esto pasa por. Entonces este
es el orden creado. Creado realmente va.
Entonces, eso es todo lo que hicimos. Entonces en realidad tenemos
inventarios persistidos, ¿verdad? Esto pasa por. ¿Qué pasa si
mi inventario persiste No. Probablemente no me
encargué de la identificación. Oh, bien, el inventario
uno tras otro. Bien, así que
lo dejamos automáticamente. Entonces donde esta mi ¿Dónde
está mi oyente? Mi oyente no está
llegando. Algo no está
pasando, ¿verdad? ¿Por qué no viene a través? Entonces, el número uno, ¿verdad? ¿Por qué no viene a través? Bien, así que vamos
a averiguarlo. Muy bien chicos. Todo bien. Lo siento, en realidad estaba un poco
distraído ya que pose rápidamente podría dar fe de algo
importante, Sí. Entonces aquí, como ves esto. Ahora, tenemos que enviar el evento. Pero antes de enviar el evento, si tenías que dispararlo ahora mismo, lo que hicimos la última
vez, esto no funcionó. No podemos obtener
los detalles, ¿verdad? Los detalles no pasaron por. Todo lo que vimos fue que vimos esto
y podemos ver
al oyente solo porque
creo que aquí nos falta
algo Vamos a absorber esto un poco. Este es el otro servicio que va
otro servicio. No he cableado. Aún no voy
a llamar a este tipo.
Ver, aún no se usa. Se supone que debo hacer esto
y hacer esto, luego hacer esto. Yo sólo puedo escoger esto
entonces dentro de este tipo. Simplemente haz este
pedido completo, llámalo. Se requiere una orden TO. Simplemente llame orden A ordenar
A, era demasiado nuevo. Lo que hay aquí, que lleva en
la otra identificación, no obtener identificación. Entonces los montos totales, este tipo en realidad da esta cantidad aquí, solo
pasa esta cantidad. Sí, ¿cuál es la queja? Ya veo. Entonces, ¿cuál es la queja? Este quiere encordar. Bien, utilicé el
otro identificador. ¿Fue el otro identificador? Quiero pasar a través. Déjame
pensar un poco en esto. Estoy pasando el otro
identificador o quiero pasar en el Quiero pasar en el ID. Vamos a descifrarlo.
Sólo el es un poco. Bien. Sí, creo que quiero pasar
el otro identificador, ¿no? Creo que ese debería
ser el sentido lógico. Identificadores, ti
el ID no debería ir probablemente solo porque el pago
no sabe
nada de la tabla de pedidos, ¿verdad? Entonces el identificador
debería estar usando, ¿verdad? Entonces, eso es todo. Yo debería. ¿Qué paso aquí?
Largo. Sí, esto debería ser, así es. Debería pasar esto
porque el pago no sabe de la tabla o, que es otra modalidad más bien. Yo identificador, puedo usar luego buscar el o en caso de que necesite
el otro y similares Entonces empujo esto aquí. Eso es genial. Eso es genial. Empecemos esto
empecemos esto, vamos a traer a un tipo, que es el CP. HCP. Sólo lo
cerraré para reabrir Llamen a esto dos. Entonces
un código es cierto, vamos a darle a este tipo. Directamente. Esto pasó. Vamos a comprobarlo. Impresionante. Ya ves, todos los pagos recibidos en obras de
escucha. Esto funciona bien. Esto funciona. Ahora hemos sido capaces de lograr
usando eventos. Hemos enviado los eventos
desde enviar los eventos. Ahora bien, por qué empiezas a
tener esto es un NIO, porque la
razón por la que está usando NI porque recuerda que estamos
usando pisadas Votales Esto en realidad Nb
Votual pisada hoy, nunca comercio virtual, pero no
creo que lo haya hecho Pero esto es en realidad básicamente
usando NIO, lo cual es genial. Pero cuando comienzas
se detiene así, usando uno de impuestos, es decir, no
se está ejecutando
en la misma pisada. Este tipo no está huyendo.
Este es el hilo principal. Todas estas son lecturas separadas, pisadas
separadas corriendo en Porque recuerda, cuando lo
enviamos este escucha
como sincrónicamente, así que no está trabajando
en la misma pisada Este es el hilo principal
donde entra. Entonces como en
el momento en que se despidió la solicitud, se despidió de una
lectura diferente esa es la pisada. Se pueden ver los cblets. Esto es cuando inicializamos
los cblets entonces esta parte es una
pisada diferente el Porque recuerden que
usamos ese sinc
y somos sincronismo quien básicamente usaba creo un simple ejecutor fiscal
si no Creo que esto es que hemos podido hacer las cosas
buenas aquí. Hemos empujado un evento desde el otro servicio de administración y el servicio o
módulo de pago pudo
recibirlo. Yo cosas buenas. Entonces podemos recogerlo
del siguiente video. Gracias chicos por quedarse conmigo hasta este
momento. Gracias.
23. Simula un evento fallido: Oigan, chicos. Hagamos
un poco de limpieza de la casa. Este debería ser
un video relativamente corto. He seguido adelante para crear
los temas sobre levantarse. Estos son los temas. En
servicio, así que solo cablear esto. Rápidamente
comete este commits hacer otros servicios ID
ocho, ese es el ID. Después fuimos de servicio. Pierde esta identificación. No es un buen mensaje de compromiso, así que lo siento. Veo otro servicio implementado,
implementado servicio de
eventos o eventos eventos eventos mostrados
evento explicado por eventos de otro
servicio u otro módulo. Entonces pagos Módem de pagos. Lo siento, no estoy haciendo un seguimiento
de esto correctamente, ¿verdad? Así que vamos a hacer esto,
hacer algo de limpieza de la casa. Entonces podemos simplemente empujar
esto tan cerca a nuestro tipo. Y básicamente debería
cerrar esto, ¿verdad? Entonces esto debería haberse ido. Vamos a refrescarnos.
Bien, entonces ya no está. Bien. Antes de que rápidamente, se supone que
es un video licial Exploremos rápidamente
la base de datos. Bien, entonces esta
es la base de datos. Ahora, no hemos mirado
esta publicación del evento. Ahora, veamos.
¿Ves que hay un registro? Entonces, exploremos esto. Entonces el registro es
evento a paso. Recuerden
que les expliqué que es posible los datos puedan fallar a la par. Por eso estamos tratando de enviarlo
de manera sincrónica. Pero si lo envías
como sincrónicamente, las cosas aún pueden salir mal. Entonces, ¿qué sucede cuando
realmente despide sus eventos
del otro servicio cuando está despidiendo sus eventos? El módulo de primavera hace es que hace una
búsqueda constante de todos sus eventos, cerdos eventos
desbloquearlos en la base de datos. Esta publicación de eventos.
Ahí es donde está. Tenemos el
evento CLI que contiene el formato JCN de un evento que es por defecto.
Se puede cambiar. Puedes cambiarlo
bien, si quieres una parte entonces la documentación,
puedes cambiarla. Creo que estoy bien y
trabajando con Jason, luego colocando la fecha de
publicación, luego el ID de oyente, el ID de oyente es siempre, si miras esto, vamos a
ex cerrar esto correctamente Este es siempre el nombre
canónico, ¿verdad? Tenemos el nombre canónico.
Creo que así es como se llama? Creo que se llama
el nombre canónico. Sí, creo que
así se llama. Ves que el nombre del servicio
está escrito aquí, luego el nombre canónico Si se comprueba el tipo VN, el tipo Vn es un nombre canónico Ese es el
nombre canónico como se espera. W es es el paquete, luego el nombre de la clase en sí. Eso es básicamente lo que es. Entonces la fecha de finalización, si no se completa,
esta sería. Entonces esto va a ser dial bill pero intentemos simular
cuándo va una excepción, cuando
realmente ocurre una excepción. Lo que haremos así lo haremos dentro del
vamos a enviar los eventos,
los eventos de vamos a enviar,
luego dentro de los pagos
dentro del servicio de eventos luego dentro de los pagos de pagos
, solo
mostremos una excepción. Simplemente muestre nueva excepción de
tiempo de ejecución. Lanzar nueva excepción de tiempo de ejecución. Este campo, este campo. Quiero mostrar la diferencia. Vamos a ejecutar esto de nuevo.
Vamos a ejecutar esto de nuevo. Esto en caso de que haya
una excepción o que ocurra algo, ¿qué esperamos ver en
esa tabla de publicación de eventos? Si esto se pone en marcha,
vamos con este tipo. Vamos a correr con
estos datos. Volvamos a hacerlo. Yo solo corro con datos tres, luego acabo de recibir estos tres.
Entonces solo corre a este tipo. Bien, estas obras.
Se mostró una excepción. Verás, lanzamos una
excepción de que esto falló. Entonces veamos ahora la tabla de publicación de
eventos. ¿Ves la diferencia?
Cuando ocurre una excepción, aún
obtiene sus datos
que se envían registrados. Sin embargo, no está terminado, por lo que esto no se completa. Al menos es la mejor manera buscar o de saber si
los datos están completados, si el evento se
completa o no, las fechas completadas no se completa para no estar ahí.
No lo verás ahí. Solo quería señalarlo porque
eso nos
dará un gran
hito cuando
intentemos luego hacer poco de trabajo en torno a
esto porque
vamos a hacer un trabajo
increíble para sacar los datos, luego publicar los eventos. Ya vemos, es una canción preciosa, cosas
hermosas que vienen, chicos, cosas hermosas que vienen. Sólo quédate conmigo hasta el final. Simplemente terminemos el video aquí y veamos el siguiente video. Adiós.
24. Crea prueba de integración de pedidos: Hola. Hola ahí. Sí, gracias una
vez más por acompañarme. Aquí la señorita Z. Todo bien. Así que hoy, fueron los últimos videos, en realidad
simulamos un evento de campo, y somos capaces de ver en la base de datos exactamente
cómo funciona eso. Vamos a mostrar rápidamente
eso muy rápido. Así que vamos a ejecutar esto.
Vamos a ejecutar esto. Bien. Se acerca. Se acerca. Bien, vamos a
revisar la base de datos. Veamos los eventos fallidos en la tabla de publicación de eventos. Bien, podemos ver si realidad no
se ha completado, esta
fecha de finalización sería nula. Todo bien. Para que
seamos capaces de hacer. Ya escribimos
el otro servicio. Vemos el otro servicio,
hemos escrito algunos detalles. ¿Por qué no escribes una prueba de
integración para esto, prueba de
Ig para esto que solo
llamará a este tipo y solo
trabajará un poco en ello, verdad? Así que vamos a
la cabeza a la vamos a la otra hacer la
otra integración. Entonces solo optaré por cablear
en el auto cableado en cableado. Solo cableado automático del servicio. Sí. Después dejo en paz el módulo de
verificación. Acabo de crear otra prueba. Yo lo llamo solo llámelo una nueva
prueba, el nuevo método de prueba. Yo solo diré pruebas
solo llámalo prueba. A qué se llama servicio de
servicio se llama lo que Cretda. ¿Todo bien? Bueno,
acabamos de darle a esto directamente. Y creo que se pueden generar atajos inteligentes de
prueba
para hacer esto. Sí, pruebas. Sí. Entonces te muestra
donde está el nombre de la clase. A ver, el nombre de la clase. No, quiero que esté
escrito dentro de Veamos. ¿Puedo escoger? A ver. ¿Puedo escoger cuál?
Quiero que esté escrito aquí. Bien. Hablando
chico. A ver. O paquete de destino,
otro nombre de clase. Llamémoslo O.
Creo que debería ser O, integración, integración,
prueba, entonces esto crea orden. A ver. Creo que eso debería simplemente entrar,
si no me equivoco. Directorio ya
contiene clase ODatee. Sí, sí, sí. Sí, sí, sí. Esto es lo que quiero. Todo bien. Todo bien. Vamos a crear un nuevo
vamos a simularlo. Todo bien. Entonces, ¿cómo
simularías? Solo estamos disparando disparando al otro y obtenemos que este controlador
realmente no está haciendo mucho, así que en realidad no voy a
probar el controlador. Voy a probar el
servicio directamente. Vamos a crear detalles.
Vamos a crear los detalles. Vamos a entrar aquí. Vamos a crear este orden DTO
DT igual a nuevo orden DTO. Que es lo que espera siempre esperando contra
P nombre del cliente. Llamemos a esta prueba
prueba Man Test Man. Después el correo electrónico, correo electrónico, solo lo llamo
pruebas en tests.com Entonces necesita una lista de lista de acabo
de llamar a esa
lista integración, ¿cómo le llamaste a eso otra vez? Déjame comprobarlo
otra vez. Se llama inventario de inventario solicitud DTO. Llamémoslo solicitar Dtistqu solo puedo
usar una lista de cosas, solo
meto Entonces crearé Vamos a tener solo tres nuevos inventarios, QuestTo ¿Qué esperas? Se puede esperar un nombre.
Solo usemos una regla. A menos que sea la cantidad tres, solo
escojamos una madre,
un nuevo inventario TO. Creo que hay un lápiz. Yo sólo escojo cuatro. Sí. Entonces así tenemos esto, esto está satisfecho.
Sólo llama directamente. Nosotros solo llamamos el make order. Nosotros solo llamamos a la
O dejar a este tipo. Simplemente obtenemos la respuesta. Activo
Hagamos algunas adhesiones. Hagamos algunas adhesiones. Afirmar conjunto que creo que
deberíamos tener el Hamcrest realmente en activo eso es
pensar que debería ser activo
que es método prostático Ese debería ser él.
Usemos la C o usemos el CAPI Esto funciona. Prefiero este Activos de
Adhesión. Esto es. Vamos a poner en otro otro
punto mensaje es igual, es igual a probar. ¿Qué teníamos?
Solo escojamos qué teníamos ¿Qué
colocamos en el servicio? Creo que este es este tipo, muestra a este tipo, muestra esto
entonces también tenemos otro. Mostramos otro estado de punto. Permite el código es uno o dos.
Vamos a explorar. A ver, es par, yo es positivo es positivo. Es positivo. Estapes igual a
igual también está bien. Menos igual a uno
o dos, uno o dos. Todo bien. Entonces solo prueba de integración
solo para estar seguro de que esto funciona, y al parecer esto
funcionará. Esto va a funcionar. No quiero matar en exceso
la prueba de integración. Yo podría haber dicho vamos
a entrar en la base de datos, publiquemos algunos detalles
y vamos a estar seguros que la cantidad en realidad
es igual. Creo que esto es lo suficientemente justo.
Esto es lo suficientemente justo. Vamos a ejecutar esto. Vamos a ejecutar esto así. Esto funciona? ¿Estás
seguro de que esto funciona Bien. Entonces
vamos a una escena, al mar, al mar, al mar, al mar, al mar. Bien. Sí, las pruebas pasan. Impresionante. Entonces donde establecemos esto realmente funciona y
eso funciona con precisión. Como puedes ver eso, así que
pudimos hacer precisamente eso. Bien. Entonces tenemos
una buena prueba de trabajo. Sí. Entonces, de hecho, prueba de
crédito para esto. Si querías probar
desde el controlador, eso también está bien. Simplemente prefiero elegir realmente del servicio solo
para probar el servicio directamente porque el controlador realmente no
está haciendo mucho, así que no quiero
probar solo desde ese ángulo, sino que puedes elegir eso y
puedes probar desde ahí. Bien. Bien, te veré
en el video de la NSTA. Sí.
25. Crea prueba de integración de pedidos 2: Bien, chicos, gracias
por acompañarme una vez más. Esto es Z aquí. Todo bien. Yo sólo quiero hacer
algo aquí, ¿verdad? Vamos a crear una prueba más. Quiero crear una prueba más, luego discutiremos
la siguiente línea de acción para lo que queremos hacer. Todo bien. Entonces la primavera modula, hay una
en realidad hay una varianza que podemos usar más como se
llama un
escenario una prueba basada en escenarios Intentemos simular esto. Intentemos
publicar creo que se llama
un detalle de pago. Sólo intentemos simularlo. Podemos colocar en un escenario aquí, escenario
acario, entonces podemos decir
escenario este escenario, el publicar la publicación entonces se requiere de un proveedor
porque requiere un proveedor para que podamos hacer un nuevo pedido de pagos
DTO, solo simulación Entonces esta
requiere otra identificación. Simplemente colocaré en un UID aleatorio, punto
UD aleatorio, UUID Cadena aleatoria. Entonces requiere una cantidad
larga solo coloco hasta 5,000. Anote. Entonces lo que podemos
hacer es que puedas decir que espero. Espero un tipo de
evento en particular. ¿Qué tipo de evento? Este mismo tipo de evento, mismo así que queremos esperarlo. Entonces en espera entonces queremos
ver si está emparejando. Hay coincidencia, esto
también toma un predicado. Esto toma un predicado. Queremos estar seguros de que estos
eventos que estamos enviando también este evento tenga un monto
que es igual a 5,000. Entonces esta es una buena
prueba, luego llegar, luego verificamos,
llegamos y verificamos. Entonces también puedes
consultar por los eventos, entonces decimos, solo imprime
algo, ¿verdad? Yo sólo imprimo algo. Los
acontecimientos, eso son montos. Veamos las cantidades que
en realidad era . Así que vamos a ejecutar esto. Ejecutemos esto y
veamos cómo se establece. Estas que pruebas
puedes realizar, ¿
verdad? Entonces este es escenario. Creo que también hay uno de eso
que en realidad
mostraría el costo de un video en realidad
mostrarlo para que no podamos decir
exactamente cómo funciona esto. Entonces, si lo miras correctamente, ves que esto pasó, ¿verdad? Y esto en realidad fue impreso. Entonces es capaz de usar realmente. Ahora bien, si aquí cambiamos
el valor, vamos a darle otro valor e
intentemos ejecutar esto. Verás que
no coincidirá con el evento. El evento va a
fallar, ¿verdad? El evento fallará
porque no coincide con esta cantidad, no coincide con esta cantidad aquí. Estás diciendo que esperen
este evento en particular. Una vez
publicado este evento, espera a este tipo y trata ver si coincide con
esta cantidad. Y si coincide,
entonces adelante. Si no coincide, al parecer
para lanzar una excepción. Bien ya ves,
está esperando porque este tipo en realidad
espera, está Está esperando un
rato para ver si
encuentras algún evento. Hay
una sesión de tiempo de espera Entonces, si tuviéramos que
aferrarnos a este tipo, teníamos que abrir a este tipo
, para abrirlo. Ves este tipo en realidad
va resultados de eventos. Si abres
resultados de eventos, verificamos de cerca. Si revisas de cerca y
si realmente lo reduce, realidad
están sucediendo muchas cosas aquí, muchas cosas realmente están sucediendo aquí. Entonces sí, este tipo de evento,
¿cuál es el tipo de evento otra vez? Este es el evento.
Volvamos. Regresemos para que pueda rastrear. Este tipo y este evento
mecanografiando le pasaron, vamos a marcar la primera opción. Este primer tipo
viene aquí. El tipo de evento no será nulo, entonces este tipo de evento escriba
este tipo de evento. Veamos el uso. Si te
desplazas todo el camino hacia abajo, es como este tipo de aquí. Veamos qué pasa
dentro de este tipo. Yo estaba aquí abajo. Yo solo elijo a este tipo para ver
el uso de este evento. Entonces si te desplazas hacia abajo, C, a C, este tipo de evento se le pasa
a este tipo luego va todo el camino hacia abajo
Llega y verifica interno. Veamos qué llega
y verificar hace, esta guía interna que
realmente usamos, veamos. Después establecemos este punto de
resultado anterior en segundo lugar. Lo que
realmente estoy tratando de sacar
aquí es que hay un tiempo de espera, espera un rato Si no lo encuentra, entonces
eliges alguna forma de excepción diciendo decir, no
puedo encontrar a este tipo. No pude encontrar los eventos
que estás tratando de publicar, así que en realidad luego
devuelve un resultado. Eso es lo que estaba
tratando de sacar. Uh, así que si comprobamos, aquí
hay tantos escenarios que en realidad se usaron. No quiero meternos en esto se supone que es una versión
simplificada, así que no quiero
meternos en esto. Todo bien. Entonces eso es
exactamente lo que pasó. Entonces, si esperas
este tipo de evento, publicamos este tipo de evento,
ellos lo están esperando. Pero sin embargo, cuando se comprobó, el monto no coincidió. Entonces como resultado,
lanzas una excepción. Bien, creo que lo
conseguimos g. Bien, así que hagamos que esto
funcione de nuevo. Bien. Entonces, el siguiente escenario que
vamos a ver ahora mismo es si llegas
a mirar esta mesa, realmente
puedes
mirar esta mesa,
vamos a solo g por
qué escribió este tipo Se llega a mirar esta mesa. No tenemos acceso
a él, ¿verdad? No tenemos acceso a
esta publicación del evento. ¿Cómo lo sé? Si tuviéramos que hacer una búsqueda de publicación de
eventos, publicación de
eventos. Esta publicación
del evento. Publicación de eventos. Estoy tratando de buscar en
clases, publicación de eventos. Ves esta publicación del evento, te darías cuenta si
intentas crear realmente una instancia en la que
realmente no puedas crear un instante. Básicamente, puedes
modelar ese camino. ¿Por qué es eso si tuvieras que
verificar la implementación? Verás que hay un adaptador de eventos
JPA. Si tiene que verificar esto,
si tuviera que verificar esto,
me desplazaré hacia abajo. Uh, bien, creo que quiero hacer básicamente, vamos a
ir a la biblioteca. Esto es exactamente lo
que estaba tratando de mostrar. Vamos. Sólo para
ser muy directo. Vamos a ir a así Monolith JPA,
eso es lo que estoy buscando. Los Monolitos JPA, sí, Monolitos API a
la luz de la luna eventos Bien, Sara JPA, ¿y nosotros? Bien, entonces probablemente debería
Mdolit eventos JPA. Creo que eso es lo
que estoy buscando. Así que mira la
implementación del GPA. Todo bien. Ahora mira esto. ¿Ves? Esta es una clase, entonces no hay público,
por lo que no es accesible. No se puede acceder a él. Entonces la forma que fue escrita no es accesible. Si nos fijamos en esto,
tampoco es accesible. Verás, no es accesible. La forma en que fue construida
no fue construida para que
tengas acceso a ella. Pero la pregunta
sería entonces,
¿cómo tengo acceso a ella? ¿Cómo tengo acceso a él? Hay algunas formas, en lugar
de tener acceso a él, proporcionaron algo llamado incompleta del evento
y publicación completa del evento. En realidad veamos eso. A ver eso, a ver
eso, a ver eso. Hay una publicación completa
del evento que puedes evaluar.
Esto está disponible. También hay una publicación incompleta del evento a
la que puedes acceder. A pesar de que estos son geniales, quiero mostrarnos un enfoque
diferente para reflejar realmente
esa mesa con JPA Eso lo podemos hacer. Bueno, al final del día todavía
volvería a usar esto. Pero antes que nada, veamos exactamente cómo podemos
reflejar esta tabla. Esta tabla la mostramos aquí
en JPA para que podamos tener acceso
completo a ella y hacerle algunas cosas
personalizadas
si pretendemos Esto viene en el
siguiente video. Todo bien.
26. Tabla de publicación de eventos modelo: Todo bien. Muchas
gracias por acompañarme. En el último video, hablamos sobre modelar la entidad JPA, y eso es exactamente lo que
estamos haciendo, ¿verdad Estamos modelando la entidad JPA, ¿
y cómo vamos con eso Lo que haría
es crear el paquete. I c el paquete.
Vamos a llamarlo vamos a
llamarlo publicación de eventos. ¿Qué estoy haciendo?
Vamos a llamar a este paquete. Publicación de eventos. Tenga en cuenta que esto no
es esencial del curso, pero en realidad
es, solo
quiero mostrar esto para
que en caso de que esto también sea
una técnica cuando estás
trabajando estamos tratando de construir
un nuevo servicio para reflejar
una base de datos existente, esa tabla o probablemente
ese servicio que creaste no tiene no
creó la
tabla de base de datos desde cero, también
es una forma de que puedas hazlo. Eso es lo que estoy
tratando de mostrar aquí. Al mirarlo críticamente,
ves las columnas, aquí es donde están las
columnas tienes que crear realmente este mismo espejo
exacto. Entonces eso es lo que
vamos a hacer. Para evitar confusiones. Lo que voy a hacer para evitar confusiones, lo que voy a hacer es que
voy a llamar a esta costumbre. Publicación de eventos
personalizados, Publicación de eventos personalizados. Esta vez,
también usa nuestro Ga, el setter de fiador entonces usaremos a to string
en caso de que lo necesites, luego para obtener una
entidad, luego una tabla En esta tabla se aseguraría que coincide con el
nombre de esta tabla. Esa será la publicación de
subrayado de evento. Derecha. Ahora para entonces asegurar que
estas cosas sean las mismas. Ahora bien, si miras
el ID correctamente, cuando lo mostramos por
aquí, el ID es un UUID No es un largo o es un UID, así que tenemos que asegurar eso también Tenemos una
identificación UUID privada, ¿verdad? Entonces tenemos esto arriba para inspeccionar. Vamos a traerlo de forma manual. Eso debería ser entradas, entradas, Java, T, UUID Entonces también tenemos el
siguiente es el identificador de oyente. Tenemos datos de
finalización de ID de oyente, solo
vamos a anclar todo Cadena privada privada,
escucha escucha ID. Recuerda, esto en realidad
se traduciría a un oyente
que se llama ID, así que es bueno que lo
dejen así Entonces tenemos
eventos privados tipo. Tipo de evento. Esto
se traducirá al tipo de subrayado de evento Entonces tenemos cadena privada. Entonces esto es serializado eventos
serializados. Recuerde ser traducido a eventos de subrayado serializados.
Entonces tenemos privado. Ahora bien, esta es una marca de tiempo. Entonces razón postgress
solo usamos lo mismo, timestamp Entonces a esto se le llama fecha de
publicación. Se llama fechas de publicación, fechas de
publicación. Derecha. También, por último, tenemos fechas de
finalización. Así que olvídate esto de aquí.
Fecha de finalización. Este tipo está diciendo: Oye, no
entiendo, necesito la identificación. ¿Atributos de ID tipo? ¿Cómo quieres que
sea una c primaria? Te doy los atributos ID
de persistencia Jakarta, luego usamos el valor de generar para simplemente reflejar la estrategia, luego generar tipo
generar tipo de identidad. No, no, no, UID, perdón. Pero Ising UID. Esto
básicamente solo lo refleja. No estás generando
porque nunca
vas a crear nada
desde aquí directamente, ¿verdad? Entonces la identificación
probablemente debería bastar. Esto lo podemos
reflejar en. Entonces puedes crear
el repositorio, repositorio. Ahora bien, la pregunta que
deberíamos hacernos es, ¿cómo identificamos cómo
identificamos un evento terminado? Un evento terminado
es aquel que tiene fecha de finalización, no nulo. ¿Por qué un evento incompleto tiene la
fecha de finalización para ser nulo? Exactamente lo que
vamos a hacer aquí. Vamos procedimiento. Llámenlo eventos personalizados. Eventos, publicación, repositorio. Luego se extiende. No, quiero crujido Explico por qué no uso
JPA excepto necesario. Siempre debes usar lo que necesites. No uses todo. Usar JPA trae demasiadas
cosas, ¿verdad? Excepto que quieres la
paginación y el aguijón, quieres las otras cosas
que realmente traen Entonces quiero que
sea un repositorio. Entonces usaría una lista
lista, eventos personalizados, lista. no me va
bien. En esta ocasión, usaré una carpa obtener
eventos personalizados obtener eventos personalizados obtener eventos personalizados para entonces
por fechas de publicación, por fechas de publicación,
no, no, no, publicación. Probablemente
fechas de publicación, uh, no nulas, no nulas y fechas de finalización, fechas de
finalización y fechas de finalización es nula. Es nulo. ¿Qué significa esto? Automáticamente, si
la fecha de publicación que
conocemos nunca es conocida y
la fecha de finalización es no, significa
que esta es lista es una
lista de eventos incompletos. Para los eventos concluidos, solo
hacemos lo mismo, pero esta vez, es
este tipo lo que no sabe. Y así es como. Eso es. Si lo necesitas, así es
exactamente como se ve. Así es básicamente
como se ve. Entonces si quieres crear
digamos una interfaz, el solo crea un servicio,
solo miror estos dos, y eso funciona Simplemente creamos
interfaz, una interfaz. Yo solo lo llamaré
eventos personalizados, publicación, servicio. Esto me va a dar dos cosas. Tengo dos firmas. Número uno, será una lista lista de publicación de eventos, publicación de eventos
personalizados. Pero esta vez por ahí lo
llamo se completa
se completa completa las publicaciones de
eventos terminados. Después el otro se completa con publicaciones de
eventos. Básicamente, eso es todo. Entonces vamos a crear la implementación. Implementación, habrá publicación de eventos
personalizados, servicio inp entonces solo
implementamos a este tipo, lo
hacemos al
servicio a los representantes a lo
requerido como constructor Entonces solo trae a este tipo, vamos a implementar los métodos, luego vamos a cablear en
la final privada, luego personalizado fuimos a
postular este tipo solo
entra y solo nos da los
puntos terminados es nulo Entonces este tipo está terminado.
Eso no se sabe. Esto funciona. Un buen escenario de prueba sería vamos a hacer una prueba de
crédito para ello. Vamos a comprobar
si lo que hicimos es exacto o estos precisos.
Vamos a prueba de crédito. Llámalo
eventos personalizados, evento personalizado. Vamos a llamarlo
publicación de eventos porque
al parecer es publicación de eventos, pruebas de
integración. Prueba de integración. ¿Bien? Sí, eso es que tiene lo que necesitamos. Recuerda, debemos
hacer exactamente lo que vamos a hacer para que en
realidad no nos encontremos con problemas. Número uno, quiero colocar en la prueba del modelo de aplicación. Entonces tengo dependencias? No creo que
tenga ninguno por ahora. No tengo dependencias. Luego conectemos al servicio de eventos con cable automático y
luego personalizado. Entonces hagamos prueba para ambos para estos dos tipos.
Llamemos al primero. Obtenga la publicación del
evento sin completar. La publicación.
Perdón por eso, chicos. Eso fue solo una llamada
que venía en mi celular. Todo bien. Bien, entonces vamos a explorar esto. Bien, entonces
pruebas de publicación, ¿verdad? Se pone bien. Esto funciona. Simplemente lo llamas nulo. Después pruebas. Entonces solo toma esto, luego trae a este tipo. Entonces llamemos al servicio. Eso se pone entonces esto Bien. Entonces entonces queremos conocer
algunos detalles, solo hacer incompleto
este incompleto,
luego lo hacemos incompleto luego lo hacemos Entonces para cada uno, solo para cada uno. Pero cada uno de los eventos
incompletos, lo
llaman evento evento Entonces vamos a aseverar
algunos detalles. Deberíamos funcionar para que
podamos activos directamente. Podemos activos que dije
que este evento este evento, C aseverar que los eventos
Este evento es una instancia, derecho de
publicación de eventos personalizados clase punto Sí, vamos a mostrar
esto. Entonces también, también
podemos afirmar
que el evento de eventos,
evento obtiene fecha de finalización Estamos seguros de que estas obtienen fechas de
finalización, Inu INO. Es nulo. Guau de esto funciona. Eso también es prueba
para el otro tipo. Yo solo escojo esto y solo
voy a cambiar algunas pruebas y se
completa la publicación web. Por lo que está terminado, eventos
concluidos. Esto también es un instante, pero esto no es
nulo, no es nulo. También mostramos para ambos. Esta debería ser una prueba suficiente que podamos
evaluar a este tipo. Ejecutemos esta prueba
y veamos. Ojalá no
tengamos ningún problema. Vamos a ejecutarlo
veamos qué pasa. Pasando por correrlo, China, Mar de China, Mar de China. ¿Somos capaces de
hacerlo con éxito? El primero pasa. El problema que tenemos es la prueba concluida. ¿Cuál es el problema con
la prueba terminada? Real no se sabe. Lo sentimos,
fecha de finalización. A ver. Lo siento, esto debería
completarse, completó el número. Vamos a ejecutar toda la prueba. Eso es en toda la
prueba, terminamos, se debe terminar
eso debería ser cierto. Debería ser capaz de
conseguir que todo sea verdad y debería funcionar. Esos son los males de
copiar y pegar. Los chicos no copian y pegan. Prueba tan completa, ¿cuál es
el problema con esto? Esperando que real no sea nulo, pero esto se sabe, ¿
o esto es nulo? La fecha de finalización no es nula.
Estamos muy seguros de eso. Déjame volver a
lo que hice aquí, terminación vamos a codificar aquí. ¿Obtuvimos la fecha de
publicación del evento no
es nula y la
fecha de finalización no se conoce Este es el tema
aquí, no se sabe. Males de copiar y pegar. poder compartido significa
eso. No es nulo. Entonces ya que vienes
de la positi así que tenemos que saltar en lo que conseguimos no es nieve esto
es lo que debería ser usado Bien, así que creo que aún estoy escogiendo
lo incorrecto. Esto no es nulo. Mm hmm. Sí, sí. Esto es lo que
debería estar escogiendo. Entonces ese era el tema ahí. Bien, así que volvamos
a ejecutar esto. Todo bien. A ver. Ojalá, ya no
hice un error tipográfico o probablemente escogí algo equivocado
en alguna parte porque
básicamente debería funcionar Todo bien. Verás, ejecutando
esto, manejando esto. Sí, estamos en condiciones de
completar esto. Todo bien. Así que estamos en condiciones de completar esta fase para ver
exactamente cómo lo hacemos. Voy a estar usando esto para cometer dos temas diferentes diferentes. Hemos creado para
otra integración también colocar en Voy a llamar a este modelo de tabla de publicación de eventos de
publicación. Entonces, ¿qué tiene esto disponible? Recuerden que mencioné,
chicos, básicamente pueden
entonces hacer paradas con él. Se puede mirar a través del
público sobre los eventos para monitorear los
eventos completados, evento no calculado. En realidad, incluso se puede
conseguir algo mucho más. Simplemente no quería
mencionarlo antes. ¿Cuáles son los
ts extra que puedes obtener? Los ts extra que puedes conseguir
recuerda, Ya sabes cada uno. Estás familiarizado con cada uno. ¿Cuál es la identificación de escucha? Ese es el
tipo de evento, lo siento, evento. El tipo de evento es siempre el
nombre cun canónico de lo que
intentas hacer del evento
que intentas enviar Entonces estos nombres canónicos c, deberías saber, Oh,
esta es la otra salida. Si
tuvieras múltiples, puedes consultar cuáles
quieres enviar. Digamos que tienes
una lista de correos electrónicos, una lista de correos electrónicos que
realmente envías. Pero como se sienta, ¿verdad? Puedes simplemente uh filtrar por los
correos electrónicos, luego los enviamos,
y los eventos en realidad serán resentidos cantar los dos métodos
que mencioné anteriormente, las publicaciones incompletas del
evento, y la publicación del
evento completado, puedes usar cualquiera de ellos. Estaremos viendo más de
eso en el siguiente video, o debería decir videos
posteriores porque definitivamente
vamos a explorar eso. A para este video, vamos a comprometernos rápidamente con esto. Comprometamos esto rápidamente. Comprometerse AM. Entonces tenemos
solo digamos creación o creado o prueba de integración, luego da a conocer diez y luego modelar la publicación de
eventos modelo Mesa de cationes. Esto cierra 11. Todo bien. Creo que esto
es bueno. Todo bien. Acabo de terminar el video aquí
y para cuando volvamos, voy a empujar esto para que el reposito
los vea chicos en el siguiente video
27. Acción de eventos: Hola chicos, gracias
por volver conmigo. Esto es Z. Si. Quiero discutir un escenario muy singular de lo que vas a
construir en este video. Este video en realidad
tendrá un escenario muy singular. Ahora, recuerde, mientras
intentamos crear el, estamos tratando de enviar
el otro evento, creamos un DTO llamado
O Payment Dt Ahora considere que tenemos otras implementaciones
u otros eventos, lo que sería considerable considerando un evento más aquí, que es el evento de correo electrónico. Entonces tenemos otro evento. Ahora bien, el escenario básicamente
es mirar esta tabla, mirar la tabla de
publicación de eventos, sabemos que esto en
realidad se encuentra por el nombre canónico,
por nombre canónico ¿Y si tenemos una
forma de clasificar? Tenemos una forma de
clasificar. Podemos identificar los eventos que enviamos y
podemos usar probablemente
un um para identificar, para cada evento que esté fuera tipo correo electrónico o cada
evento que sea de tipo, el otro pago DTO, quiero que vuelva a intentar
para el evento de campo ¿Puedo considerar
ese escenario? Entonces ese escenario
estará explorando. Significa que necesitamos
poder crear un um, al mismo tiempo, poder
vincularlo realmente para crear um, luego vincularlo al
nombre canónico de ese evento Entonces podremos recuperar eso. Puede ser una tabla de caché.
Entonces podemos recuperar eso. Entonces usa eso para
consultar esta guía, o luego
usará eso luego
pasarlo evento incompleto al evento incompleto para poder hacer algún trabajo.
¿Qué estoy tratando de decir? Ya ves que se acerca
este escenario si tuviéramos que explorar, entremos en el otro servicio. Vamos a explorar esto. Exploremos esas
dos interfaces. Entonces entiendes mejor
lo que estoy tratando de sacar. Digamos que el código es definitivo. Esto es publicaciones de
eventos
terminados, publicaciones de eventos terminados. Entonces tenemos la otra
variante, las otras variantes, que es la publicación incompleta del
evento, la publicación incompleta del evento. Publicación incompleta del evento. Ahora, vea que la publicación incompleta del
evento toma algo muy único. ¿Ves? En realidad
toma en un predicado. Se puede pasar en un predicados. decir, podemos decidir decir, este predicado, queremos que este
predicado sea de tipo Queremos que sea de tipo. Verificaríamos a través del tipo de evento para
asegurarnos de que el tipo de evento realmente coincide con
el nombre canónico de los eventos que enviamos, ¿ Entonces sé que esto podría ser un poco complejo lo que estoy tratando de
explicar, ¿verdad? Pero yo solo quería
dar un trasfondo mientras saltamos al código. Entonces este podría ser un video
bastante largo, ¿verdad? Así que en realidad podemos
conseguir esto de una sola vez. Oh, si encontramos un
muy buen hito para llegar a terminar el video, entonces continuaremos
en el siguiente. Bien, vamos a
meternos rápidamente en ello, chicos, y hagamos que esto
funcione, ¿verdad Es una cosa
genial increíble, ¿verdad? Hagámoslo funcionar
porque va a ser una
implementación muy agradable. Todo bien. En primer lugar,
comenzaré con, crearía un paquete,
un paquete llamado acción de eventos porque estamos apuntando a
los eventos, ¿verdad? La acción del evento. Entonces en realidad estaría
creando una tabla donde se va a almacenar obtuve una tabla
llamada acción de eventos. Estaremos almacenando el enlace almacenando el enlace
entre el tipo de acción, que será el e. Recuerde el tipo de acción básicamente
serán los eventos que enviamos, ya sea los eventos de correo electrónico u
otro evento de pagos o cualquier otro evento como los
eventos más en proporcional, debería decir directamente
relacionado con el
nombre canónico de ese De esa manera, si podemos
obtener el tipo de eventos, podemos simplemente recuperar el
nombre canónico de la base de datos, y luego podemos
usar eso como predicado en la publicación incompletada,
la publicación del evento
completo,
podré activar realmente el podré Vaya, esto va
a interesarle. Bien, hagámoslo. Esa es entidad, una entidad, en Gea at ce, ¿por qué digo servicio? Hielo una mesa. Sólo me
interesan los índices. Índices,
volvería aquí en un rato. Simplemente espejear rápidamente solo
crea rápidamente este ID como de costumbre, entonces va a ser
un valor generado. Entonces la estrategia
será para nosotros ID. Una identidad, quiero
decir identidad. Entonces vamos a estar usando un
largo, usando un largo, largo, entonces
vamos a estar usando una acción de acción privada. Estaremos definiendo
la acción en un momento. Entonces en columna en columna, la longitud solo sería dos. La longitud será de dos,
dos. Está bien. Porque recuerden,
basándonos en los noms que creamos, teníamos la capacidad de
usar un conversor de tipos, que en realidad mostré en
los videos anteriores, ¿verdad? Después privado, entonces
voy a llamar a esta cadena. Vamos a llamarlo evento. Nombre canónico. Nombre canónico es este. Este es el nombre cónico. El nombre canónico es este
el nombre completo de Caronica, y eso es exactamente lo que
realmente quiere salir . Todo bien. Entonces una columna, entonces llamamos a esto aparentemente ambos
no deberían ser falsos este
este nombre Llamemos al nombre Yvette Can,
YvetTK . Esto está bien. Ahora, hemos creado esto. Entonces queremos crear un
sub paquete llamado action. Esta acción no
contendría entonces contendría la clase de
acción que necesitamos acción, va a ser un um,
va a ser una enumeración,
luego aparentemente un constructor y getter de OlaX Entonces por ahora, vamos a estar
viendo el pago, los pagos. Entonces los pagos, llámalo P, luego el correo electrónico, llame al código E, ¿verdad? Al igual que hemos estado
creando todos los eventos,
todos los nums que hemos estado
usando código de cadena Código. Entonces sí. Quiero crear
un método especial aquí para que obtengamos
algo muy chulo. Llamemos a esto público no
sé si vamos
a necesitar un nombre italiano, pero vamos a conseguirlo. Probablemente obtenga acción por su nombre. Pasar el
nombre de cadena final en un nombre de cadena. Luego giramos como stream, dottream luego action
values, los valores, action on the values, then the filter, then
the action,
then action dot name dot equals ignoKase then we
pass this name that
we pass this name that Entonces encontraremos
primero, encontraremos primero, o de lo contrario sé bien Ar
llamemos a esto Final. Bien, entiende la diferencia, ¿verdad? El código, este es el código. El nombre es este,
este es el nombre. Si lo haces para encordar un um o haces un nombre,
esto es lo que obtienes. Pero el código es este, entonces hay una diferencia, hay
una diferencia. Quiero esto, no esto. Todo bien. Vamos a crear
el convertidor de tipos. Lo siento, voy los
créditos dentro de esto. Vamos a crear el convertidor de tipos. Llamémoslo acción
acción convertidor. Gracias solo
llámalo tipo. Está bien. Está bien como acción
porque hay varias cosas que quiero
hacer con ella, ¿verdad? Vamos a crear el convertidor de
acción. Al parecer, sabemos que en realidad
implementará para implementar el convertidor de
atributos. Convertidor de atributos aquí, entonces lo
hacemos para que no
necesitemos colocar notación. Entonces solo haz que Auto aplique cierto, entonces solo obtenemos esto y aparentemente, eso es lo que tenemos. Entonces solo haz esto simple
I Acción. Eso es acción. Acción. Si la acción no es nula. O si la acción es nula, cualquiera que
sea la acción que funcione, es
nula, simplemente rellene Cierto. Nueva excepción de tiempo de ejecución vendría cambiar todo el tiempo de ejecución? Cuando realmente empezamos a
tratar con excepciones, esto funcionaría entonces correctamente. Entonces esta acción es nula, entonces si no lo es, entonces giramos. Acción Uh, eh, consigue código, ¿verdad? Sí, ese es el código. Entonces estaremos usando
el código en el DV. Entonces para esto, hacemos lo
mismo para decir que código. Entonces, los chicos de Bell me
mencionaron que este sería un video relativamente largo o simplemente
buscamos
un buen hito. Entonces no es así que van a
hacer una corriente de carreras, luego valores de acción, los valores. Uh huh, filtro de puntos, sin filtro, filtro, la
acción, luego acción. punto de acción se pone bueno, eso es igual, puede señalar mayúsculas y minúsculas o simplemente
iguales para ser lo mismo. Entonces bien primero o bien cierto. Bien primero o bien,
cierto. Una vez. Acción no encontrada. Esto
está bien. Todo bien. Hacer buenos avances,
hacer buenos avances. Hemos hecho
cosas muy buenas, muy buenas cosas. Ahora bien, ¿cómo identificamos qué evento? Cómo
vinculamos esta acción de evento a estos eventos DTO u otros detalles podrían ser creados otros
detalles del evento se crearán Lo haría en tiempo de ejecución
o al inicio, quiero poder
enlazar Quiero
poder recuperar este nombre
armónico dinámico No quiero hacer ningún
trabajo manual, debería ser dinámico. Lo que voy a hacer es
crear un marcador. Voy a crear un empacador personalizado. Llámalo marcador personalizado. Solo crea un marcador de
evento personalizado, ¿verdad? Si estás familiarizado
con saber si
estás familiarizado con cómo crear validaciones
personalizadas
en botas de primavera, esto es exactamente lo que
estoy tratando de hacer En esta ocasión, usa
una interfaz artística. En la interfaz. En la interfaz, entonces usas la palabra
documentada en objetivos, objetivos. Ahora, ¿a qué nos dirigimos al tipo de
segmentación? Un tipo de objetivo,
luego a con tensión. Entonces, ¿a qué nos dirigimos?
Tiempo de ejecución. Queremos que sea política de tiempo de ejecución. Esto funciona, así que solo
puedo hacer esto. Creo que prefiero esto. Uh,
hay tantos de ellos. Creo que solo
método estático método estático. Método postic. Tengo tantos tipos. Voy a buscar C. Bien, supongo que
sólo voy a ir a los formularios. Se supone que es Java
pulmón entonces tipo elemento. Yo sólo quiero colocar
el tipo aquí. Si elimino esto, sí, elimino esto y
solo digo elementos, luego tipo puntos tipo que
debería funcionar, eso debería funcionar. Todo bien. Uh Muy bien. Bien, entonces esto funciona. Entonces solo para colocar el
tipo de elementos, el tipo aquí, y eso debería funcionar.
¿Correcto? Eso debería funcionar. ¿Por qué no está bien en ella? A ver. No encuentra ninguna. Veamos entradas, Java, long,
notación, tipo de elemento, tipo. Bien. Entonces de todos modos, ya que
ya tenemos este solo uso. Yo solo quería dejar
tipo elemento tipo o tipo. Esto básicamente una costumbre, si quieres crear
una validación personalizada. Podría decir,
¿cómo sabía esto? Echemos un
vistazo al controlador,
Controller , si nos fijamos
en el controlador chicos, ya
veo, tiene básicamente
lo mismo. Básicamente es lo mismo. Entonces tiene lo mismo, es por eso
que los componentes en Springbook incapaces de
escanear para poder saber, esto también es un
componente porque en la raíz de todos estos chicos, todos
son componentes Revisas el
controlador, ¿ves? Componentes.
Todos son componentes. Es capaz de escanear en
busca de componentes. Entonces es componentes que busca. Así que básicamente en
el controlador al servicio en postulación, todos estos tipos son algo el componente en
segundo plano, ¿verdad Exploremos también el repositorio. ¿Ves? Ese es nuestro componente de
componentes, el bagram cuando tienes
el escaneo de componentes ejecutándose, solo busca cualquier cosa que realmente tenga el componente Entonces, lo mismo que en realidad estoy tratando de lograr aquí, ¿verdad? Entonces, en realidad haz esto para
que realmente escaneemos. Pero en esta ocasión,
estaremos haciendo el escaneo. Estaremos escribiendo
el código para escanear y encontrar esto nosotros mismos. Todo bien. Entonces tenemos esto. Entonces quiero traer
una acción, ¿verdad? Es la misma acción. La
misma acción um, ¿verdad? Yo lo llamo
acción de evento. Acción del evento. Sí. Entonces este es el
marcador personalizado que quiero crear. Entonces escogeré este marcador
personalizado. Voy a elegir el marcador personalizado. Entonces voy a elegir
el marcador personalizado, después iré a mi
otro DTU de pago luego voy a comercializar, ¿verdad Voy a comercializar. Entonces ya
puedo practicar. Impresionante. Ya puedo practicar.
Y como ves, tenemos el evento
acción evento acción. Entonces quiero que
sean pagos de acción. Entonces, lo que significa que este es un evento que se
desencadena para los pagos. Ahora cuando miramos el correo electrónico
también hacemos lo mismo, pero esta vez, voy a ser para
probablemente correo electrónico. Todo bien. Entonces ahora que hemos hecho esto,
¿esto es suficiente para que lo
localicen? No, no hemos terminado. Recordamos que creamos todo esto y es una implementación
personalizada, así que necesitamos crear realmente
todo el código personalizado para ello. Entonces bien, antes de continuar, vamos a crear rápidamente
el repositorio que necesitamos por aquí, el repositorio para este tipo, ¿
verdad? Repositorio de eventos. Eventos eventos, acción,
epoctent action epoct. Entonces extiende, creo que acabamos de terminar el video después de esto para que
podamos consumir y el siguiente tipo. Entonces es un largo, es un largo. Entonces es epocty,
debería haber una interfaz. Interfaz. Somos una interfaz. Entonces creo que Moline solo
necesita un tipo para ser una acción de evento
opcional, opcional Entonces no estoy encontrando por esto, necesito una costumbre ya que obtenemos
evento acción por acción. Sí, eso es lo
que necesito. Entonces debería ser acción acción. Bien. Entonces, creo que aquí
hemos llegado a un
buen hito. Entonces esto se está poniendo muy,
muy jugoso, chicos. Volvamos en el
siguiente video para
explorar realmente un poco más para hacer
algo más de implementación. Gracias, chicos.
Viendo el siguiente video.
28. Acción de eventos 2: Muy bien chicos, gracias
por acompañarme una vez más. Esto es Z aquí. De hecho, nos detuvimos cuando
intentamos definir la acción del evento. Si realmente
ves el último video, por favor mira el último
video porque eso
explicaría exactamente lo que estamos
tratando de lograr aquí. Simplemente procederemos a la configuración. Vamos a crear una configuración personalizada, una configuración personalizada, una configuración personalizada. Así que un archivo de configuración personalizado, ¿verdad? Esto básicamente implementaría
un ejecutor de aplicaciones. Se puede implementar
una aplicación. El ejecutor de aplicaciones
funciona de la misma manera. ejecutor de aplicaciones
funciona de la misma manera, un corredor de línea de comandos funciona. Se puede utilizar entonces complicación
corredor línea corredor. Hacemos lo mismo,
requerido como constructor. Vamos a implementar el corredor. Runner de aplicaciones, entonces voy a
estar trayendo en el repositorio privado de eventos solo privado, luego repositorio. Bien. Entonces, ¿qué estamos
tratando de lograr aquí? Bien, así que vamos a
seguirme en detalles, chicos, entonces harían
algunas cosas geniales aquí. Ahora, escanearíamos
a través de los proveedores, escanearíamos a través de los proveedores
o básicamente escribiríamos código. Para buscar cualquier clase que
tenga este marcador personalizado. Busca cualquier clase que
tenga su marcador personalizado. Cuando encontramos la clase que
tiene su marcador personalizado, entonces en realidad
escogeríamos cada una de ellas, obtendríamos el nombre canónico,
luego link, link
ese tipo de acción,
el tipo de acción de
este marcador personalizado, luego con el nombre canónico en la tabla Eso es lo que queremos
lograr aquí chicos. Eso es básicamente lo que
queremos lograr. Comience, está utilizando el proveedor de escaneo de
piezas de clase. Sí, voy a estar usando este tipo sanser luego
proveedor o Callicanna Creo que me gusta proveedor mejor proveedor Proveedor
Gracias, completa. Esta debería ser nuestra clase de marcador de
eventos personalizada. Ahora bien, esto es lo
que estamos buscando. Estamos filtrando para
este tipo en particular. Luego creamos un conjunto de definición de Bin porque
al parecer para ser
una definición de Bin
se convierte en una definición de Bin. Tenemos una definición de Bin. Vamos a llamarlo Definición de bin, vamos a Enlazar Luego
escogemos el proveedor, después lo encontramos dentro de un conjunto
de paquete o el paquete. ¿Cuál es el nombre del
paquete en el que estás ejecutando? Te estás ejecutando en ven Z, mod de
primavera costo esto es lo que
necesitamos, haz clic en este tipo. Sí, esto es lo que necesito.
Z, muelle modular cos Todos llegando a alguna parte, chicos. Bien, bajemos. Entonces buscaremos tu. Veamos tu definición de haz,
definición de bin. Eso es genial. Definición de bin. Entonces comprobamos si
la definición de Bin es instancia de una definición de
ser anotada Recuerda, estamos usando
esa anotación. Entonces, si es una instancia de definición de ser
anotado, eh, ¿entonces qué seguimos Recuerda a este tipo,
llamemos a este conjunto, así que vamos a convertirlo en
un Bind Si lo es, entonces llamemos al mapa. Los objetos de cadena de mapa. Cadena a objetos, entonces llamarlo atributo
anotado porque ese es el acto que exploramos
que no es así? Llamémoslo debería ser, debería ser anotado
nate anotado Siendo definición.
Siendo definición. Entonces en realidad lo estamos lanzando. Lo estamos lanzando. Aquí, esto básicamente
vamos a llamarlo y. Llamémoslo a una nota
mapa de atributos, atributos. Atchfootmp. Todo lo que sé
esto puede parecer un poco nuevo, pero dirías lo
que quieres lograr. Entonces obtenemos los meta datos. Después puntos obtiene los atributos anotados, atributos
anotados Después pasa en el binning, que es el
marcador o clase personalizada Entonces punto obtiene nombre canónico. Creo que esto
tiene sentido ahora, chicos. Obtiene el nombre canónico. Ahora que he conseguido
el nombre canónico, necesitamos almacenar todos
los detalles dentro un mapa porque necesitamos de
todo dentro de un Este es un mapa de
cuerdas y cuerdas. Cadena de cadena, llámalo mapa de
acción de eventos, un nuevo mapa hash. Entonces eso está hecho. Hemos sido capaces de lograrlo. Luego escogerán
el mapa de eventos. Los puntos ponen, y luego ponen el mapa
anual thetiute que hemos conseguido Dots
obtiene Te preguntas de dónde viene esta
acción de evento. Esto es Esto
viene de aquí. ¿Dónde está otra vez? Aquí. Lo siento, aquí, acción del evento. Buscas dentro de la clase de marcador
personalizado, buscas este nombre, el
campo que tiene este nombre. Y eso es exactamente lo que
necesitamos. Entonces busca eso. Entonces después de conseguir eso, entonces
vamos a moverlo a tostring. ToString. Entonces definición de Bin que hemos conseguido aquí como una definición binaria
Bin, luego obtener el nombre de la clase Bin. Entonces este tipo nos
daría lo que necesitamos. Entonces, si luego bajamos, entonces
podemos mirar a través
del mapa de eventos, derecha, Recorriendo a través de él,
entonces puedes obtener la acción del evento Vin acción, incluso acción. Recuerda esta acción de evento,
quiero cargar esto
en la base de datos. Eso es lo que estamos tratando
de hacer aquí. Acción Vin. Entonces fue la acción de acción. La acción es entonces acción. Recuerda la
clase personalizada que creamos, obtén acción por nombre y luego pasa la clave.
La clave es este tipo. La clave es este tipo. Entonces, ¿para comprobar qué tipo
de acción es esta? Porque este es el
campo está
mirando ¿qué tipo de acción es esta? Entonces, una vez que recibe
la acción, ¿verdad? Entonces, tenemos la acción. Entonces necesitamos los eventos action
set action. Eso tenemos. Entonces eventos acción
conjunto de puntos nombre canónico, nombre canónico dentro del VDV, que es una
definición de clase Bin que Eso es genial. Entonces quiero que
hagamos algo extra. Entonces antes de poner esto en, queremos comprobar
si este std consigue acción acción vismti esta
lista está vacía, Si no
lo encontramos no existe. Estoy diciendo que la acción
no existe en la base de datos, ahí es cuando debes hacer esto. Eventos, acción, lista de acciones de
eventos. Creo que no estoy creado en
una lista de acciones de eventos agregar. Presione en la acción del evento aquí. Entonces solo presiona esto aquí. Esta lista eventos acción. En acción. Entonces solo
por favor solo sé un nuevo. Conocemos la capacidad, ¿verdad?
Sí, conocemos la capacidad. capacidad básicamente
será del tamaño de este, ese tamaño, ¿verdad? Simplemente coloque este evento lista de
acciones lista de acciones. Bien. Entonces eventos,
eventos, pendiente. Fue lista de acciones. Bien. Entonces hazlo. Entonces
hagamos una comprobación más. Si la lista de acciones de eventos está vacía, si no está vacía, esta lista de acciones de
eventos no
está vacía. Entonces, ¿qué hacemos? Escoge el repositorio,
luego vamos a guardar todo. Así que recuerda, estamos
cargando todo, todos estos eventos en
esta lista de acciones. Entonces, si está vacío,
no hay necesidad de molestar a la base de datos. Pero si está vacío, está vacío, entonces simplemente guardamos
todo en él, ¿verdad? Entonces esto en realidad nos serviría para cargar únicamente en lo que
ya existe en los datos Si no existe,
si no existe, lo que no existe es en
lo que cargamos. Si existe,
no lo carga en. Entonces esto es esto puede ejecutarse
varias veces sin la forma el código
escrito puede
ejecutarse varias veces sin realmente
experimentar una falla, tratando de cargarlo ya
existe en una base de datos, ¿verdad? Entonces podemos mejorar esto
para aquellos que son arrullos, básicamente se
puede
mejorar puede colocar en el método, hacer que esta carrera Entonces probablemente podrías poner todos estos detalles
en una clase personalizada. Cuando se coloca en una clase personalizada, entonces probablemente puedas
tener una cerradura de cobertizo, ¿verdad? Puede usar un compartido para
determinar si debe ejecutar. Si vas a estar ejecutando,
digamos que en realidad
tienes un servicio que es
un orden distribuido, se ejecuta de
manera distribuida más bien. Entonces una vez que haces eso
digamos que eres microservicios y quieres c más de una
instancia de esto Entonces, aparte de
todo funcionando, solo
puedes usar el candado de cobertizo para determinar cuál corre. Entonces, cuando el
corredor de aplicaciones llega allí, verifica el candado del cobertizo. Cualquiera que sea la que obtenga la llave
dentro de la cerradura del cobertizo, entonces es s. Entonces, la cerradura de
cobertizo a veces usa según lo programado,
¿verdad? Bien. Entonces solo pensé que
debería mencionar que para
los que estén
interesados en hacer eso, no
vamos a estar explorando
eso en este curso. Bien, así que ahora he
podido lograr lo que
nos hemos propuesto hacer, esta es una
implementación increíble Esto es costoso. Esto es costoso. Probablemente quieras
el método que escribiste, también
creas una bandera personalizada para determinar que
debería ejecutarse o no. Si por alguna razón sabes
que la aplicación, ustedes no han
creado un nuevo evento, un nuevo evento que tenga
un marcador personalizado, solo pueden
elegir
esa configuración y simplemente configurarla en caídas para que no
se ejecute en absoluto
porque esto está usando reflexión y la reflexión en realidad
es costo. No ralentiza el inicio de tu
aplicación y como creo que esto es algo que quizás
quieras explorar. Ten esto, pero hazlo mal una vez solo cuando
tengas nuevos eventos que realmente necesitan ser
agregados a la tabla tasop Bien. Esto es
increíble, ¿verdad? Estoy seguro que ustedes están de acuerdo
conmigo, es increíble. Pero, ¿funciona? ¿Funciona? No sabemos si
funciona, ¿verdad? ¿Aún tenemos nuestra base de datos arriba? A ver.
La base de datos sigue funcionando. Vamos a ejecutar esto. A ver. Al parecer, actualmente, solo
tenemos un evento, Ip espero que esto pueda
tener pago de tation de
evento
que es P con la canonicam guardar a Vamos a revisar. Esta es la
actualización, vamos a ejecutar esto. Vamos a ejecutar esto. Estoy muy emocionada como ustedes por
saber que esto realmente funciona, estoy emocionada como ustedes. Entonces funciona, deberías
poder crear la tabla, y ver si esto
funciona con precisión. Genial, no hay error. Entonces
vamos a refrescar esto. Fresco. Entonces tenemos
la acción del evento. Vamos a explorar. Yay. Esto funciona. Entonces pueden ver, ahora
podemos obtener la acción,
que es P, que es pago, entonces es el
nombre canónico, que es Y esto va a
ser muy útil, muy, muy útil. Bien, chicos, este es un video
relativamente largo, y creo que somos capaces de
lograr el objetivo Pasemos a hacer algunas
otras cosas interesantes en el siguiente video. Nos
vemos ahí, chicos.
29. Vuelve a publicar un evento incompleto: Oigan, chicos, gracias por
regresar y una vez más, hicimos algo
bastante asombroso, ¿verdad? Algo bastante asombroso
en el último video, ¿verdad? Entonces, antes que nada, creo que aquí
hacemos algo genial. Entonces quiero seguir adelante
para cometer esto. Ya he creado y he creado un número,
que es acción de eventos. Así que voy a seguir adelante
y comprometeré esto. Yo solo lo llamaré
acción de evento implementada. Implementado, Implementado. Entonces esto cierra Tf, I Df y luego podemos empujar. Empuje esperamos que esto
realmente funcione. Bonito y agradable. Chicos, ahora queremos
explorar algo un
poco más asombroso en este video. Así que un poco más increíble. Recuerda, en realidad tuvimos un tuvimos eventos incompletos
y eventos completados, no
hemos podido
ejecutarlo, ¿verdad? No hemos podido
desencadenar eventos
incompletos
para ver si
realmente se
completarían , de lo contrario Como resultado, vamos a crear
una muy única sin embargo, antes de seguir adelante, ¿
podemos intentar ejecutar nuestra prueba? Porque probablemente hemos
roto algo aquí. Quiero sospechar que
aquí
rompimos algo , algo roto aquí. Vamos a ejecutar esto. Vamos a ejecutar esto. Verás, hemos roto algo. Algo roto. Como si
chicos, ¿qué rompes? Los pedidos están bien.
Veamos todo en quiebra. Esto es decir que otro modelo
depende de la acción del evento. Esto depende de la acción del evento. Tenemos que arreglar esto, que es el otro pago DTO,
ese es el problema Tenemos que arreglarlo.
Tenemos que arreglarlo porque viola la regla Sabía que esto iba
a ser un problema, así que vamos a arreglarlo rápidamente. Recuerda, esto ha sido. Este tipo en realidad es visto
como un ser dentro de él, al
parecer para darnos un problema. ¿Qué hacemos? Vamos a acreditar personalizado Vamos a
acreditar la información del paquete. No quiero exponer esto, nunca
vamos a
usar esto afuera, usa este uso fuera Este
es el tipo que usamos. Esta acción y esta. Ni siquiera necesitamos esta cobertura de atributo pero vamos a elegir estos dos. Vamos a exponer a este tipo. Vamos a exponer la información del paquete. Entonces este paquete que info, quiero el Ag. Ustedes ya están
acostumbrados a esto, El g dot spring
framew modula,
modula el nombre de la interfaz
porque es sub paquete Recuerda, así paquete, usamos el llamado nombre de la palabra
paquetes Acción. Entonces sí, eso es todo. Si ese es el caso, entonces para el tipo
que hace uso de ella, tenemos que asegurarnos de
que realmente esté llegando. Sí, lo estamos usando, lo
estamos usando en. ¿Está en orden, verdad?
Sí, ¿no es así? Este tipo, el orden es el
tipo. Este es el tipo. ¿No es aquí? Esta
parte, vamos a ver. ¿Estoy en el directorio correcto? Oh, lo siento, aquí. Esto es
lo que estoy buscando. Queremos agregar queremos
decir, Oye, también, quiero que permitas paquete
I módulo evento acción. Recuerda, ese es el
modo esta acción de evento, luego
acción de paquete sub. Todo bien. Con esto hecho, volvamos a hacer una
prueba. Vamos a hacer una prueba. Vamos a
ejecutar esta prueba de pago de la ONU. A ver. Pero esta obra.
A ver. ¿Funciona esto? Esta obra. O
aún nos falta algo. A ver. Nos encargaremos
de que fue código. Impresionante, increíble. Así vemos. Estamos de
vuelta en el camino, chicos. Estamos de vuelta en el camino, ¿verdad? Porque esto es algo
muy clave. No debemos olvidar esto, ¿verdad? las lecciones
de las que estamos tratando prestar
realmente este curso o intentar pasar por
este curso, que es modular,
debemos asegurarnos de que no
rompamos ninguna regla de
principio a fin, nunca
debemos romper
ninguna regla, ¿verdad Bien, así que esto es
solo cosas geniales. Esto es solo cosas co. Ahora, lo
siguiente que quiero
abordar en este video. Lo siguiente que quiero abordar en este video es que quiero mirar recuerda cómo publicamos ahora
nuestros eventos incompletos Necesitas poder publicarlos
realmente. Entonces con eso, vamos a
crear dentro este evento acción porque quiero creer
que esta es la
misma acción de evento. Entonces voy a liberar esto
dentro del mismo tipo de acción, este submodelo de acción así es como
lo voy a llamar Yo lo llamo republicar. No sé si hay
un ¿Era eso correcto? El fue que publicamos,
solo publicamos. Entonces volvamos a publicar. Publicamos eventos incompletados. Finalizados sin completar Eventos
incompletos. Hacer eventos singulares. Entonces esto sería SLF para que J sea un servicio para ser un servicio Entonces eso se requiere
X constructor. Esto funciona. Esto funciona. Ahora, vamos a estar necesitando
varias cosas. Necesitando lo privado, final.
¿Necesito un editor? Sabes, no
necesito editor. Necesito evento acción
hipotético acción poeta,
evento acción post, necesito un evento
privado, eventos finales
incompletos Recuerde, interactúan para usar el diseño eventos
incompletos, eventos incompletos,
escribe el privado, final final completado
eventos terminados, eventos terminados. Eventos concluidos, luego privados. Probablemente voy a recuperar algunos
datos del entorno. Yo sólo jurando el medio ambiente. Medio ambiente. CN entonces solo
traeré esto. Bien. Todo bien. Así que hagamos un poco de trabajo, ¿verdad? Vamos a trabajar.
Hagamos un poco de trabajo. Bien. Lo estoy viendo
otra vez, mirándolo. A ver, vamos a crear un método
público, vacío público. Sólo llamémoslo
publicar. Publica. Llamémoslo publicas.
Entonces tomas una acción, le das una acción
que quieras publicar. Creo que esto va a tener
más sentido, ¿verdad? La acción una vez que publicamos, entonces obtenemos la opción y
obtenemos evento ese evento
acción de la fosa. Luego
acción de evento opcional, acción de evento, lo
llaman
acción de evento o
digamos acción de
evento opcional opcional. Evento acción Dios mío el evento
post obtener evento por acción, están pasando
la acción, ¿verdad Todo bien. Comprobamos si está vacío, si esto está vacío. Esto está vacío. Entonces solo vamos a registrar
algunos detalles info porque no hay acción de evento para
estas acciones, esto funciona. No obstante, si el evento está presente, si el evento está presente, entonces puedo registrar esa información, puedo publicar publicamos publicamos eventos
incompletos para acción esta acción,
¿de acuerdo? Bien. Entonces acción de eventos,
acción de eventos, eso lo conseguimos. Entonces hacemos una clase. Acción clase acción clase, acciones de
eventos, esto no
es lo que necesito. Necesito esto para conseguir el nombre
canónico para mí. Hago clase punto por nombre. No pasar el evento acción punto obtener nombre canónico.
Eso es lo que necesito. Entonces esto debería mostrar
c mostrar una excepción. Siguiente stione solo tírala en lugar de
manejarla. Tírala. Entonces incompleto así que
probablemente debería manejarlo aquí para que
podamos cuando estamos implementando nuestras acciones, solo
entramos aquí. Así que vamos a agregar
esto a TryCatch. Entonces, para intentar atrapar. Vuelve a lanzar nuestra
excepción personalizada aquí
cuando estemos listos. Quiero recuperar esto dentro de este tipo. Vamos a
convertirlo en un nulo. Vamos a conocer entonces clase de
acción, entonces, esta cera Una clase de acción, luego No p
publicaciones de eventos incompletos, punto volver a enviar Entonces tratamos de presentar. Entonces pasamos en Recuerda,
toma en un predicado. No pases en el predicado. Así que la publicación de eventos
luego la publicación de eventos, puntos obtiene evento,
puntos obtiene clase es igual a esta clase que acabamos encontrar tenemos que asegurarnos de que esta
es en realidad la misma. ¿Correcto? Tengo que asegurarme de que en realidad
esto es lo mismo. Todo empieza con lo mismo. ¿Por qué se queja esto?
Esa es la clase final. No hay problema. Podemos
simplemente moverlo aquí. Tenemos que exponer a ese tipo, solo ven aquí y
así como aquí. Sí. Era películas. Sí,
entonces debería estar bien. Así que puedes simplemente lo sé.
Todo bien. Eso funciona. Entonces quieres una vez que hayas terminado
entonces podemos eliminar eventos, puntos, luego podemos
publicación de eventos , luego
elegir los eventos. Recuerda, este es el
tipo terminado. Esto se completa. Para que puedas escoger la publicación
del evento terminada. Tiene una opción de borrar. Entonces puedes eliminar también con un predicado o podemos
eliminar con nuestra duración Entonces, si esto realmente funciona
con éxito, no
podemos garantizar
que inmediatamente este se ejecute porque si verificas que es una transmisión y podría tardar un tiempo en completarse
realmente. Verán, si
nos fijamos en esto, vamos comprobar esta implementación. Mira esto. En realidad, ejecuta un filtro de flujo para cada uno antes de invocar al oyente de
destino Entonces no podemos garantizar que
terminaría inmediatamente
antes de colocar esto en, ¿
verdad? Entonces no podemos
garantizarlo. Entonces lo que vamos a hacer así que vamos a
hacer es que solo eliminaremos,
eliminaremos a cualquiera que no sea el
poner la duración, ¿verdad? La duración, duración, ¿verdad? Horas de horas de horas. De horas,
luego ponemos la propiedad
propiedad para conseguirnos las horas. Eso es en realidad configurable. Literalmente podemos hacer punto
configurable get property. Recuerda, aquí definimos
ambiente. También podemos usar un valor del marco de primavera,
pero confío en usar esto. Entonces llamémoslo
elimina evento dot action. Llamémoslo así y éste requiere que
sea de clase qué de clase larga, larga o clase. Entonces vamos a darle
un valor por defecto. Digamos valor predeterminado
de digamos 5,000. Cuántos conjuntos solo dicen
100 Bytes cien. Déjame explicarte esto correctamente. Ahora tenemos algo
genial. Podemos llamar a este tipo y solo
ver si funciona, necesitamos saber si
funciona para que no funcione. Vamos a configurar la
variable de entorno de lo que
realmente dijimos aquí. Vamos a la
variable de entorno enviro bend variable Para ahorrarnos tiempo, lo he
copiado asífueron solo hacer esto sí. 5,000. Esto es en realidad
eventos, estos eventos. Volvamos a revisar a este tipo. Así que borra eventos. Duración. La duración es
sobre la duración utilizada. ¿Bien? Entonces como pueden ver, son mapas para este
tipo. Todo bien. Así que en realidad tenemos eso y eso es en realidad
cosas geniales. Eso es algo genial. ¿Ya terminamos? Creo que todavía podemos explorar algún
detalle extra en lugar de pasar en acción probablemente debería
tener uno que publicara todos los eventos
completados. Entonces deberíamos tener uno
que tenga una lista de acciones. Creo que esa debería ser
una buena implementación. Más de eso está en el siguiente
video. Gracias, chicos. Ver siguiente video.
30. Vuelve a publicar el evento incompleto 2: Bien, chicos, podemos
hacer esto en el último video. Creo que tenemos que probar
si funciona, ¿verdad? Creo que alguien
va a estar de acuerdo conmigo, tenemos que probar si
esto funciona, ¿verdad? Vamos a probarlo si funciona. ¿Tenemos acción de eventos? No tenemos una acción de evento, o vamos a
seguir adelante y crear una. Vamos a crear un
evento pruebas de acción. Oh, me perdí a estos
chicos. Me perdí esto. Yo quería añadir
algo aquí. Vaya, no sé
por qué me lo perdí. Sé que vamos a ir a buscar
por esta acción, así que necesitamos crear
un índice para ello dos veces Creo que ustedes
estarán de acuerdo conmigo. Lo hago en índice. En index, entonces el nombre
solo lo llaman acción ID, acción IDX, luego
la lista de columnas, la lista de columnas
sería la acción, que coincide con esta y
city obtiene por acción ¿Bien? Entonces creo que esto
funciona. Creo que esto funciona. Entonces es único, ¿verdad? Sí. Sí. Creo que esto funciona. Esto funciona. Bien. Una vez que realmente iniciemos
esto se publicará realmente, el índice realmente
se colocará allí. Estábamos tratando de ver si
podíamos probar a este tipo. ¿Funciona? ¿
Este tipo trabaja? ¿Bien? Entonces, antes que nada,
hagamos una prueba de crédito aquí. La prueba de cred. Lo llamaré en acción Prueba de solucionadores de hicebra Bien como de costumbre, prueba de módulo de
aplicación. Entonces necesitamos verificar para
poder activar eso. Después una prueba, evita
algo solo para verificar. Sí, solo verifica el módulo
para verificar el módulo. Verificar módulo, solo para verificar. Sólo vamos a ejecutar una
verificación del módulo. Solo confirmemos esto si
esto no rompe nada. Sitios. Yo dirijo a este tipo. Bien, así que vamos a dirigir a
este tipo. A ver. A ver. Ahora funciona. Entonces la siguiente parada, entremos. Publiquemos por cable los dispositivos
terminados para conectar a este tipo o para cablear a los cachorros eventos terminados, llamémoslo eventos completados Vamos a hacer una prueba para ello.
Vamos a hacer una prueba para ello. Llámalo pruebas nulas. Eventos calculados completados. Entonces solo llamo nulo, luego hago publicar qué acción recordar la acción de los pagos. Si revisas la tabla, esta tabla tiene una incompleta
tiene una que está incompleta. Si esto funciona, debemos encontrar
la fecha de finalización aquí. Eso es lo que supongo que
encuentra el detalle de finalización. Asegurémonos de que hemos eliminado la simulación para eventos
fallidos. Vamos a estar seguros. ¿Por qué es?
¿Por qué es? ¿Por qué es, verdad? ¿Dónde está? ¿Se trata de
pagos pagos? También tenemos algo de trabajo aquí, no digamos
tabla de pagos, vuelve. Solo vamos a estar seguros, esto realmente
debería pasar y ver si realmente selló con éxito,
podremos sellarlo. Bien, así que hagamos esta
prueba. Hagamos esta prueba. ¿Todo bien? Sí, básicamente
debería ser una prueba. Tiendo a activarlo desde aquí. Probablemente quiera crear
tal vez algún tipo de controlador
probablemente solo ya sea esto solo lo desencadene o
algo así o tal vez un trabajo, como mencioné,
así que eso funcionaría. A ver si esto
funciona. Esa es la suela menos. Esto ha sido empujado. A ver. Impresionante. Ser
siempre ver oyente, el oyente ya
va a los espectáculos él Dejando los eventos en no encontrado. No se encontró? Pensé que estaba
enviando algo más. Una publicación encontrada
publicamos buscando eventos
completos, una
publicación encontrada. Esta enfermedad o
pago dF saltando una
publicación de vida vocacional lala incompleta Vamos a revisar la mesa.
Yo hago algo mal. Vamos a revisar la mesa. Oh,
esto no pasó. Esto no pasó por algo que
en realidad no sumó. Algo no
sumó. A ver. Para los eventos, veamos los eventos que realmente
hicimos estos eventos. Veamos qué pudo haber
pasado? ¿Quiero eliminar? No creo que
quiera borrar todavía. Entonces déjame comentar
esto por ahora. Entonces, activemos a este tipo. Vamos a mostrar que esto
realmente pasa. Entonces creo que
hagamos algo extra. Entonces déjame elegir a este
tipo. Hagamos esto. Entonces hagámoslo. Entonces
hagamos esto. Vamos a registrar. Hagamos un poco de inicio de sesión, ¿verdad? Variable CP, perdón, perdón. Este debería ser el predicado hablar
directo
predictor pensando Bien veamos qué
pudo haber salido mal. Como puntos de interrupción aquí. Yo vería si esto coincide. Voy a ver si este coincide
es eventos completos. A ver. ¿Cómo puedo
verificar esto? Déjame pensar. Vemos el nombre el nombre
canónico. Nombre canónico u obtener clase. ¿Qué hice aquí?
Esto consigue clase, ¿de acuerdo? Eventos. ¿Por qué volviste
a tener clase? Eso es sólo un nombre
ahí te dan clase. Entonces esta clase. ¿Por qué estoy confiriendo la clase? Lo que se pone en el nombre
económico. Entonces los eventos eventos,
estos eventos. Para que pueda evaluar, no estoy
dando la capacidad de evaluar. Sólo estoy dando la capacidad de
evaluar los eventos. Y este evento es un objeto. Entonces estoy tratando de
comparar los objetos juntos para mostrar los eventos. Bien. Veamos este identificador. A ver. Yo solo
publicaré este video. Podemos volver a ver lo que
realmente tengo aquí.
Sólo un minuto. Bien. Gracias, chicos. Seguí adelante para probar esto y descubrí
cuál es el problema. Nuestra implementación funciona,
lo que realmente teníamos
aquí para los eventos publicados. Esto realmente funciona. No hace
falta que cambies nada. El tema fue básicamente
éste, donde estaba el tema. Mientras lo ejecutamos en la prueba, realidad
ejecutamos
esto desde la prueba, no se encontró
al oyente Entonces la acción del evento del oyente aquí. No
se encontró al oyente Al hacer esto no se
encontró al oyente. Tenía que hacer, tuve que crear un controlador dentro de
la acción del evento, luego en realidad lo empujé. Luego activando a
esta persona persona usando eso como parámetro de
solicitud, luego escogiendo eso y luego
publicando desde aquí Entonces eso realmente funcionó.
Eso realmente funciona. sólo voy a demostrar.
Ir a la acción del evento. Ves que esto se ha completado. Ha concluido,
voy a hacer esto
voy a establecer a ahora
y lo guardaré. Entonces reiniciaría esto
reiniciemos la aplicación. Al iniciar la
aplicación,
creo que coloco algunas cosas
en el modo bug. Muevo estos puntos de interrupción y vuelvo a
este tipo y coloco aquí
los puntos de interrupción para que
veamos que la acción es
realmente precisa .
Vamos a activar. Esto es Vamos a activarlo. Ese es el pago,
que es el num. Azúcar, entra aquí. Entonces, evaluemos
esta expresión para ver qué tipo de valor, qué tipo de om nos dan. ¿Ves? Así que lo
conseguimos con precisión. Entonces una vez que empujemos esto, solo observemos lo que tenemos aquí. Observe esto de cerca.
Entonces empuja esto. Ya ves, O pago
es si te pierdes ahora. Entonces, vamos a confirmar esto. ¿Ves? Esto en realidad está terminado. Entonces básicamente, eso es todo. Así que somos capaces de
hacerlo con éxito. Entonces lo que haría lo haría es que
además de esto, cortemos algunos métodos extra
personalizados. Así que métodos extra personalizados para
poder hacer para que publiquemos. Y si queremos publicar
para lista de eventos. Yo puedo hacerlo publicar,
después
publicamos, también podemos llamarlo
publicamos para esta época. Se puede tener, digamos
una lista de acciones. Lista de acciones, luego listas de acciones o acciones de
acción. Tenemos esto, entonces
también esto es acción, no acción, solo acción. Entonces tenemos esto.
Entonces podemos entonces cuatro Sin acción para cada uno.
No se limite a volver a publicar Acabamos de publicar a este tipo. Eso realmente funciona. Eso nos da lo que tenemos básicamente. Cada uno de ellos, entonces
podemos decidir eliminar y podemos comenzar a movernos completamente para que podamos hacer este trabajo podemos usar la expresión
Lambda aquí. Esto funciona o podríamos
decidir eliminar todo. Nosotros solo lo llamamos
republicar Esto
publicamos que no toma
ningún parámetro, ¿verdad Tomando algo privado
ahora, éste lo
publicas todo,
todo, ¿verdad? Todo. Así que solo para registrar eventos de
publicación. Llamémoslo eventos
incompletos. Eventos concluidos, ¿verdad? Entonces
tienen para lo mismo. Así que solo a esta hora miramos a través de
todo, ¿verdad? Para Acción, acción, luego
acciones que valoren, tu los valores, ¿verdad? Acción de valores. Entonces esta es tu prueba, luego solo publicamos. Para que podamos hacer esto. Ahora bien, una extracción que podemos
hacer es que en realidad podemos colocar en podemos hacer que este
schedueDo lo haga horario Programado. Podemos decidir
usar una expresión cron Digamos que para aquellos que
quisieran que su trabajo
corra probablemente a medianoche, podrías tener una expresión cron y colocar para medianoche Creo que la medianoche debería ser
cero, cero, luego estrella estrella estrella. Esto funciona o entonces podrías decidir publicar
por una tasa fija. Este es un trabajo actual
o por una tasa fija. Llamémoslo
tarifas fijas, tarifas fijas. Esto es vamos a ver
vamos a explorar esto. Sólo voy a descargar la descarga. Veamos exactamente qué dice
la documentación
sobre lo programado. Sabemos exactamente lo que esto significa. Fix streaming es un cuarto
dentro de un periodo de invocación, para seguir invocando este
periodo o usar una cadena Solo usa un así que este
es un largo fijo, así que solo puedo decir pong ¿Un fondl también? La unidad de tiempo es milisegundos. Pero ¿puede estar sobreleyendo
por unidades de tiempo? ¿Tiene una unidad de tiempo? Impresionante. Cuenta con una unidad de tiempo. Simplemente podemos hacer esto luego
reemplazando unidades de tiempo. Llámalo unidades de tiempo
y unidades de tiempo. Digamos, uh Segundos. Hagamos segundos, ¿
verdad? Eso nos daría la posibilidad de ver si esto
realmente funciona con éxito. Entonces voy a hacer 10 segundos, ¿verdad? Haré 10 segundos. Entonces lo que haría es entrar aquí. Voy a entrar en la base de datos, bien, y de hecho voy a
borrar estos dos. Voy a ponerlos en nulos. Todo bien. Entonces veamos si
esto funciona, ¿verdad? A ver si esto funciona. Entonces esta vez no es un horario
que no tenía horario. Entonces, lo que significa que no necesitamos
realmente quali desde ningún lado. Así que vamos a ejecutar esto de
nuevo y luego solo observemos después de 10 segundos de que viene si esto
realmente se activa. Bien. Entonces veamos. Entonces solo traeré
esto así que veamos, ¿funciona después de 10 segundos? Otro pago recibido. Ya ves, ha invocado impuesto,
ya invocado ya Vamos a confirmar esto Awesome. ¿Ves? Esta Esta caja. Lo hice por todo. ¿Ves? No encontré
nada por correo electrónico, fondos para pagos de acción. Yo publico computado para la acción, luego dice que venga después de
cada 10 segundos. Creo que
podremos demostrar en gran medida cómo funciona el evento de
publicación. Así que en esta ocasión, siguiente video, entramos en el pago
luego registramos los datos en
los pagos y publicamos luego implementa el marcador de
evento personalizado para correo electrónico. Bien. Nos vemos
en el siguiente video.
31. Implementa pagos y listener de correo electrónico: Todo bien.
Gracias gracias por regresar, gracias por seguir acompañándome y gracias por
estar aquí
conmigo esta vez. Todo bien. Así que entremos. Aquí hemos
podido hacer algo de trabajo. Esto es lo que
podemos lograr. Debes seguir corriendo
después de cada 10 segundos. Creo que solo quiero
detenerlo por ahora, no va cada 10 segundos,
solo déjalo así. Entonces, ¿qué estamos haciendo a continuación? Vamos al otro servicio. Otro servicio. Por cada
pedido que envié, vamos básicamente por cada otro enviado por cada otro enviado,
enviemos un correo electrónico, ¿verdad? Vamos a empujar un correo electrónico.
Vamos a sacar un correo electrónico. Empujemos un correo electrónico diciendo: Oye, por favor envía un correo electrónico
una vez hecho esto. Entonces esa sería una gran
prueba para nosotros, ¿verdad? Entonces para completar eso,
vamos a crear un correo electrónico
DeTao Un detalle de correo electrónico Ella solo llena nuestro caso de uso que estamos tratando de lograr. Así que hazlo un disco.
Grabe y luego agregue nuestro marcador personalizado. Si no sabes lo que es
este marcador personalizado, necesitas ver
videos anteriores para poder ver. Marcador personalizado. Luego hagamos
cadena de correo electrónico, cadena, correo electrónico, luego cadena nombre del cliente, luego identificador de orden de cadena, luego cantidad total larga,
luego un Bollier Si el pedido está completo, o se completa el pedido. Están terminadas,
¿verdad? Creo que debería ser suficiente, ¿verdad? Creo que deberían
bastar o los completos. Ahí se completa. Está bien. Entonces. A continuación, entremos
al otro servicio. Acabo de hacer algunas
mejoras personalizadas, ¿verdad? Solo haz alguna mejora
personalizada. Por lo que queremos enviar
el correo electrónico. Así que haga el correo electrónico DTO, correo electrónico DTO, nuevo correo electrónico DTO,
no pase ningún dato Entonces, ¿qué son los detalles? El primero es el nombre del cliente,
solo el correo electrónico, el correo electrónico del cliente de
rata, luego el pedido
dT dot obtener el nombre del cliente. Cuál es la siguiente
fase o identificador. Eso debería ser de dónde
sacamos que eso debería ser de la orden O obtiene o identificador. Entonces, ¿cuál es la cantidad total? El monto total, creo que
tenemos el monto total, estamos enviando el
monto total aquí, este recibe monto. Creo que debería ser así. Eso debería funcionar. Entonces finalmente, ¿esto o completado es falso? Los otros ya están terminados. Ajustemos este orden
completo para simplemente enviar ambos eventos
juntos. Pasa esto en. Esto tomará detalles del correo electrónico. Yendo aquí, llevándose a
este tipo también. O llevarte el
correo electrónico de este tipo contigo. Creo que eso debería funcionar
principalmente. Acabo de crear un editor de eventos. El correo electrónico de publicación para usted. Entonces solo diré loglog. Sin información. Entonces
solo voy a ver el envío de correo electrónico por correo electrónico para otros. Creo que esto funciona. Creo que esto funciona.
Creo que esto funciona. Entonces dentro del pago, la necesidad del pago,
hagamos algunas cosas geniales. Hagamos algunas cosas geniales. Vamos a los pagos. A los pagos, no
hemos tocado este servicio
de pago. Sólo hagamos un poco de trabajo.
Hagamos un poco de trabajo. Tenemos esta escucha aquí. Todo bien.
Sólo hagamos un poco de trabajo. Ahora tenemos esto
recibimos a este tipo. Digamos que el pago es igual a los nuevos pagos, ¿verdad? Solo pagos, entonces
eso establece o ID. Establezca d ID, luego solo
pague a usted obtenga ID, luego establezca los montos de monto que le
pagamos para obtener montos. Entonces lo dejamos al estado. El estado aún está incompleto. Eso sigue incompleto, no
hecho, así que está incompleto. Entonces solo llama al
repositorio de pagos , eso es pago seguro. Creo que eso
básicamente debería hacerlo. Ahora en realidad estás
usando el correo electrónico usando el correo electrónico. Significa que básicamente ahora
necesitamos tener recordar, deberíamos considerar el correo electrónico como otro modelo diferente
porque es posible. Sé que hay algunas
empresas en realidad tienen un servicio separado
que maneja el correo electrónico. Cada uno de los correos electrónicos que son siete organizaciones va solo
a ese servicio. El CV probablemente se integre con algún SMTP de
terceros o algún servicio de correo electrónico de terceros, luego simplemente cablean
todo y pueden tener varias instancias
otra en realidad Vamos a crear un nuevo modelo. Solo llámalo correo electrónico. Esto
solo contiene una clase. Simplemente llámalo servicio de correo electrónico. Servicio de correo electrónico, eso es todo. Ese tipo sólo
tendrá un oyente. Eso es básicamente lo que tienes. Entonces pruebo para J, entonces eso es componente, entonces
solo lo llamo nulo. Enviar correo. Eso es esto funciona. Pero esta
vez estamos escuchando, no para esto, estamos escuchando
para el detalle final del correo electrónico. Esto lo estamos escuchando
. Entonces recuerda que usamos nuestra tonelada en la aplicación,
módulo oyente Simplemente puede registrar la información del punto de registro. Entonces decimos correo electrónico
propiedades recibidas, propiedades recibidas. Estás asumiendo que el
correo electrónico no sabe nada de ningún otro modelo, dices si correo electrónico si correo electrónico, esto es, si correo electrónico Email GTO, que mi toque? Yo creo que sí. Correo electrónico o completo. Si no está completo, entonces hacemos esto más, lo hacemos, ¿verdad? Esto no es de ninguna manera óptimo. Solo estoy tratando de hacer una demostración, ¿
verdad? Entonces esto no es óptimo. Creo que debería
haber algunos detalles extra. Se puede decir normalmente lo que
sucede es que
probablemente debería haber un HTML donde
luego configure las cosas. Usas un marcador de posición
para colocarlo en y los chicos de la interfaz de usuario o el UIUX
habrían
diseñado una interfaz agradable y los chicos de
front-end tendrían en realidad tienes una plantilla donde solo inyectas Entonces solo superas el
mensaje, ellos reciben el mensaje, y simplemente se
inyectan en display así que ese es un correo electrónico bastante agradable que se
enviará al cliente Eso es lo que pasó. Pero
aquí solo lo simulamos, así que solo simularé cadena. Por este es el cuerpo
lo que estamos enviando digamos que los correos M plus reciben nombre, diez más esta nueva línea, diez más vamos y solo
digamos, otro fue inicializado Otro se inicializó con ID más luego el identificador de correos electrónicos, diez más este plus y
2000 con nosotros suma de esto, luego bajemos Creo que puedes colocar el aquí. Iniciar suma, entonces esos correos electrónicos obtienen montos, montos, montos
totales. Entonces recuerda está en largo, debes
recordar dividir por 100. Está en largo, dividir por 100. Largo, eso es info, solo di correo electrónico
inicial correo
electrónico inicial otros detalles. Creo que esto funciona.
Esto funciona. Esto funciona. Perdí cuerpo. Este correo electrónico En esta casilla. Esto. No estamos haciendo
nada fantasioso, debería
ser un común un plus Fancyful Entonces el
correo electrónico no funciona. Yo sólo voy a elegir el mismo mensaje
solo ser lo mismo. No es de ninguna manera, ninguna forma de anemia. Pedido por correo,
digamos que esta vez. Si el pedido está completo, solo diga su pedido. Con ID ID, esta tarea de este Ta algo de esto se completó
con éxito. Me completé con éxito. éxito, simplemente llame a
este correo electrónico detalles de correo electrónico, detalles finalización o correo electrónico o envíe por correo electrónico detalles de finalización este trabajo detalles de finalización. Solo toma esto. Así que al final del día sólo
podemos registrar esa información. Entonces el correo electrónico envía al correo electrónico envía a luego solo registra este correo electrónico, envíalo por correo electrónico al punto
GetImilsRcord Bien. Eso es correo electrónico, mientras
recibe algo más. Correo electrónico. Todo bien. Entonces así es exactamente como se verá el
servicio de correo electrónico. Por lo que ahora necesitamos modificar. Creo que vamos a revisar
nuestro otro servicio. Entonces el servicio de datos ahora está bien. Para que podamos mandar a ambos
juntos. Nosotros comprobamos. Ahora estamos empujando a
publicar el correo electrónico. Creo que podemos
probar esto. Podemos probar esto. Entonces veamos cómo funciona esto. Pero esta vez, en realidad también
estamos enviando datos de correo electrónico, bien. Entonces veamos, veamos. Entonces lo que pasa es que iniciamos
esto y lo ejecutamos. Lo ejecutaremos desde el
controlador Dummi que creamos aquí, ¿verdad? Del controlador
Dummi Creo que todavía tenemos nuestros
datos en alguna parte de aquí, así que permítanme
revisar cheque cheque cheque. Solo revisa nuestro boceto.
Derecha. Entonces sí, entonces vemos cómo el
CSL acaba de empujar esto al otro y
veamos que se ejecuta Veamos esto.
Esto se completó, así que veamos nuestro registro. Echemos un vistazo a la bitácora. Nosotros. Ves que esto funciona. De hecho me va
Empatisive inicializar DZ, bla, bla, bla se
inicializó inicializó Entonces el siguiente va correo electrónico enviado para probar en
este, el oyente Se pueden ver los otros pagos dentro del oyente,
esto realmente funciona El oyente elige oyente para correos electrónicos de
la aplicación funcionen correctamente porque
ahí es donde registramos este Empaties Simplemente puedes
explorar eso rápidamente. Mira esto. Ver. Así que sí vimos
las propiedades de correo electrónico recibidas. Entonces, bien. Entonces creo
que es un buen hito. Solo demos un paso atrás y vamos a implementar rápidamente para digamos que queremos
completar el o. Todo bien Nos vemos
en el siguiente video.
32. Corregir el error en Implement Payment 2: Oigan a todos, aquí Z. Hubo un error único que realmente ocurrió
en el siguiente video. Rápidamente quiero señalar. Básicamente podrías
arreglarlo y nos
alejamos para que no tengas que
experimentar el mismo problema. Sólo quiero hacer un video
muy corto para
explicar lo que pasó. Si notas en ese video, realidad
cambiamos un detalle. De hecho, entramos en el servicio de
pago y
cambié esto lo cambié
de encendido a pedido completo. Hacer esto inmediatamente de
inmediato no se
alinearía con lo que ya tenemos
en la base de datos. Recuerda esta identificación de vendedor, en realidad
se basa en lo
que realmente tenemos aquí. Porque cuando realmente
empujamos evento, hay
un oyente, escucha, el oyente se
basa en el paquete,
este paquete, luego
el nombre del método Una solución rápida, lo que
podrías hacer rápidamente es entrar en la base de datos para
entrar en la base de datos. Entonces di que estás usando un nombre de paquete
diferente. Por eso nombro este nombre
de paquete base. Hay un paquete base, nombre de paquete
diferente. Entra y cambia todos
los registros que tengo encendido,
cámbialo para completar orden. Recuerde, hay un identificador de oyente en la tabla de publicaciones de eventos, y eso
solucionaría rápidamente el problema Así que no tienes que esperar
a que tarde
en realidad arreglemos el error. Todo bien. Gracias chicos. Nos vemos en el siguiente video.
33. Implementa el pago 2: Bien, gracias chicos
por acompañarme. Una vez más. Bien, esto
está aquí. Bien, entonces creo que aquí hubo un errata Estaba usando pago u obtuve
otro ID usando el pago y DTO así que he podido corregir esto porque mientras
estaba inspeccionando,
descubrí que esto era
nulo y esto era cero, así que ahora, pero he
podido arreglarlo, ¿verdad Todo bien. Así que sí. Un derecho, así que simulemos
las piezas otro ID, digamos, el usuario quiere que el cliente quiera
completar el pago. Correcto, así que solo podemos hacer eso
enviando otro evento
desde el pedido. Yo sólo digo este controlador. Aquí teníamos un controlador. Este controlador solo
tendrá otro que diga pagos
completos completos. Yo sólo hago esto. Público y luego decir entidad de
respuesta. Otro,
llamémoslo orden completo. Creamos esto en unos minutos. Pedido completo. Llamémoslo
llamémoslo orden completo. Pedido completo. Entonces tomas un pedido completo. Terminado. Sí,
creo que está bien. Entonces también dale un terminado. Solicitar cuerpo luego devolver responstyg cerca de
responsenity, responsentity Entidad de respuesta. Entonces no necesito esta entidad de
respuesta. Entonces, luego este otro servicio,
eso son pagos completos. Por lo que implemente este pago
completo. Entonces tendremos un pedido
completo. Bien, creo que esto
debería funcionar, ¿verdad? Si quieres sacar el
estado HTTP, está bien. Bien, así que antes
que nada, busquemos esto. Voy a colocar esto dentro del DTO. Al parecer hazlo un disco, veamos, veamos. Solo da algunos detalles aquí. Sólo llamaremos,
llamaremos a esta cadena. Oder identificadores para
ser identificador necesario, luego Boler pagos completa Creo que debería estar bien
completa creo que esto funciona. Sí, así que esto se ve bonito. Bien, para volver aquí, esto no debería ser feliz. Debería ser feliz,
esto debería ser feliz, entonces tenemos que crear a este tipo. Vamos a implementar esto. Todo bien. Voy a tomar todo esto,
moverlo al sí. Pago completo. Entonces ese es el siguiente que
queremos mirar. Así que básicamente
solo buscamos el. Entonces orden repositorio encontrar orden, implementamos este get
order by order identifier, luego pasarlo el
otro en identificador. Entonces danos una optativa. Yo opcion es un opcional. L solo lo llaman pedido opcional. Cargador opcional. crear más espacio para que
podamos ver visiblemente Debe ser cargador opcional. Siguiente cosa, ¿puedes decir si el cargador
opcional está vacío? El cargador opcional está
vacío. Pero está vacía. Entonces solo tira cerca del
tiempo de ejecución corrige todos estos
errores más adelante. Entonces otro no encontrado. Está bien. Pero sin embargo, si no está vacío, el otro obtendría
el otro solo decir monto
final de las cantidades largas sería que tenemos el inventario del pedido
inventario, luego monto. Recuerda, creamos esto
creamos esto en los últimos
algunos de los videos anteriores. Veamos esto donde realmente
usamos la consulta, en realidad obtenemos esto, hicimos esto. Todo bien. Tienes que
probar esta consulta. Podemos probar fácilmente esta
consulta. Yo sólo escojo esto. Entonces sólo podemos ir a Consola
crear la consola de consultas. Yo sólo coloco esto aquí. Veamos las identificaciones que
tenemos Tenemos ID uno. Hablemos ID uno. 50 hijo es uno. A ver. Esto funciona? Esto funciona. Somos capaces de probar Data
works. ¿Dónde estaba yo? Estaba tratando de crear
esto. Sí. Ahora somos capaces de obtener los
montos finales largos y cuando tenemos eso entonces podemos
enviar un correo electrónico o correo electrónico igual a nuevo correo electrónico. No se limite a colocar el correo electrónico del cliente de otros
puntos, otro punto obtenga el nombre del cliente. Entonces, ¿qué más? Simplemente pase
u obtenga el identificador del cliente, no pase la cantidad, no diga verdad
porque en realidad es cierto. Ese es el completarlo. Entonces llamamos
al otro servicio. O servicio de eventos.
Recuerda que tenemos otro servicio de eventos
para enviar nuestros eventos. Entonces solo para completar pagos, completar pagos.
Pagos completos. Vamos a permitir que tomemos
el pedido completo, el pedido completo. Enviar
el pedido completo. Quiero enviar el
pedido completo y quiero
enviar el correo electrónico.
Acabamos de enviar el correo electrónico. Entonces vamos a devolver algo, tal vez nuevo pedido completo. No quiero que los detalles,
solo quiero decir, claro. No digas verdad. Simplemente diga que
el pago completo es cierto. Eso funciona, ¿verdad? Eso funciona. Entonces, para cuidar
los valores nulos, así que usemos un JCN include, coloque JCN include non Entonces eso solo se
encargaría para que no
veamos la parte nula de la
parte de la que no nos ocupamos. Entonces esta ninguna parte de nobity no
sería lo mismo. Bien, así que vamos a crear
esto. Vamos a crear esto. Todo bien. Bien, así que básicamente solo
lee lo mismo. Entonces solo queremos publicar
y solo poner esto aquí. Permítanme factorizar estos pagos
completos. Entonces esto solo
será acuñar aquí. Pagos omnity con
otros detalles detalles, luego el correo electrónico,
empujando el correo electrónico Espero que el correo electrónico esté completo. Sí, el correo electrónico debe
ser copiado, cierto. Todo bien. Entonces eso es
básicamente todo. Entonces quiero publicar esto
entonces. Llamemos a esto. Llamemos a este paso intentando
completar el pago, ¿verdad? Con eso, solo publicamos. Entonces también venimos aquí a
decir, pensémoslo. Pensemos en pedacitos. Vamos terminado ido, solo digamos correo electrónico de pago completado. Sí. Si tienes eso, necesitamos un oyente un oyente
para este pedido completo Tienes que entrar en la
guía de comentarios para implementar esta guía. Tienes que hacer un “void say on” para tener un
pedido final completo, un pedido completo. Módulo de aplicación
oyente, eso es Vamos a hacer SOUT
vamos a usar un registro ya que
siempre hemos usado la información de registro Sólo un oyente recibido en oyente digamos orden
completo, recibir es.Esto funciona Entonces se puede decir pagos
opcionales. Entonces pago, solo ve pagos
opcionales. Pagos, costo de
pago depositario, pagos de
multa que estamos
usando lo siento usando Gs Obtener pagos por o DNI. Tienes los
pagos completados o el identificador. Entonces vamos a subir un poco esto. Tomemos por este
camino. Nosotros tenemos esto. Sí. Solo necesito hacer solo
decir si esto está presente, solo escogemos los pagos, los pagos opcionales, luego solo
haremos conjuntos de pagos A establece estado completado, establecer estado a estado de pago
completado. Entonces depositario de pago
eso es guardar. Creo que esto lo maneja.
Recuerda que ya hemos atendido el
servicio de correo electrónico si esto es cierto Entonces esto es o no está
completo, o está completo. Recuerdo lo que
estamos haciendo aquí, diciendo, o aquí está completo. Empujando esto. Creo que
eso realmente lo maneja. Creo que había
otra cosa que no hemos atendido si
miras esto de cerca No atienden para ello y ese
es el pedido completado. Enviando a este tipo fuera. También es un evento y
no lo atendimos. Esto básicamente debería tener
también justo como correo electrónico. ¿Presentamos
el evento de dominio Creo que
no hice esto, haz esto. Yo solo diré implementa eventos de
dominio, eventos dominio a partir de moléculas. Lo mismo aquí, implementa eventos de
dominio de
Jolecles Si esto es esto, también significa que necesito
colocar aquí un marcador personalizado, un marcador personalizado Yo no. Creo que estoy
complicando las cosas, colocando esto solo vamos a
crear cual es el pedido aquí Esto requería que requiriéramos
algo así que permítanme
llamarlo como se llama respuesta de pedido
completado. Permítanme crear
algo más llamado respuesta de pedido completado. Completé la respuesta del pedido. Sí. Esto va a funcionar. Esto ya no sería
un evento, solo una respuesta simple. Yo solo solo devuelvo un lingote, solo trabajo, entonces ya
no necesito esto. Uh en esto ya. Entonces, sus mi escenario. Entonces no necesito
esto porque ya
no usamos esto, ¿verdad? Entonces puedo colocar un
marcador personalizado en marcador personalizado. Después acción evento acción. Todavía no he creado
esta acción, así que Cores acción acción pago Esto
también debería ser un pago, pero quiero que sea una
acción que complete, así que completa los pagos.
Llamémoslo C. Acciones completa
completa los pagos. Pago completo de underscoe. Esto funciona. Entonces entraré aquí para crear este pago completo de underscoe Viniendo aquí, y
yo sólo voy a hacer esto. Seré C.
Volveré aquí. Derecha. Recuerda, esto se
cargará automáticamente para nosotros, así que no tenemos que
preocuparnos por ello. Eso es algo genial
porque ya hemos hecho la implementación
en esta configuración, totalmente hacer todo lo que no
se molestará por eso Entonces, si el sentido de ventilación, esto también se canalizará
en porque recuerde que corredor de
la aplicación
realmente hace el trabajo por nosotros Creo que estamos en un buen lugar
ahora mismo, en un buen lugar. No conocemos la
implementación. Creo que queremos.
Vamos a probar esto. Probemos este
pedido completado. Vamos a probar esto. Entremos aquí, ¿verdad? Solo escojamos bots.
Entremos aquí. Vamos a entrar aquí. Et
lo empujan uno tras otro. Este debería ser creo que
quiero que este sea un post también. Publicar un mapeo posterior. Entonces este el espejo, solo
etiquetaré esto como completo está completo. Pongamos esto aquí. Eso es correcto. Sí. Entonces esto contendrá
qué identificador. Escoge tu identificador
en realidad gira aquí abajo el uso lo que es que funciona. Permítanme cambiar esto
a Z4. Todo bien. Entonces cambiemos
el correo electrónico a cuatro. Bien vamos a empujar esto. Creo que deberíamos hacer
algo diferente. Tal vez ¿cuáles son los objetos
que tenemos en inventario? Confirmemos esto.
Tenemos un bloc de dibujo. Vamos a usar la
parte de dibujo. Vamos a cambiar esto a dibujar la parte
L solo hazlo un seis. Vamos a darle a esto otra vez. Todo bien. Comprobemos el otro
inventario otra tabla. Esta es la otra mesa, una Z
cuatro, esta es la última. Comprobemos cuál
es el identificador. Este es tu identificador. Volvamos a nuestro guión. Entonces coloquemos aquí el
otro identificador, hagamos esto cierto.
Publiquemos esto. No se encontró. Lo que hacemos. Déjame ver. Diciendo esto no
se encuentra O completa,
buscando esto. Esta parte no se
encuentra. Vamos a revisar. Creo que ma metió
algo aquí. Se completa. Supongamos, ¿qué hicimos
mal? A ver. A puntos de quiebre aquí. Vamos a
darle otra vez. A ver. No se encuentra. Es decir,
algo que no hice bien. Vamos a verlo correctamente.
Este el primer tipo pasó por esta
orden directamente, luego esta orden se completa, ¿
o es un camino que coloqué aquí A ver. Nosotros
solo esto lo siento, no
he reiniciado
la aplicación No creo que haya reiniciado la aplicación, reiniciemos esto Simplemente no pude encontrarlo no lo pude encontrar porque no lo
he reiniciado Entonces ahora
probablemente deberíamos haberlo encontrado. Vamos a darle a esto y
espero simplemente decir verdad. Todo esto es cierto. ¿Por qué me mostraste
o no? A ver. Yo no
pensé que no usaba esto. Veamos esto.
Oh, perdón, perdón, lo siento está terminado
o respuesta. No hice esto
respose terminado terminado res pose. Cierto. Sí. Eso es
cierto. Empecemos con esto. Todo bien.
Veamos que esto se hace realidad. Voy a darle a esto
otra vez. Sí, es cierto. Vamos a verificar el pago.
Sí, podemos ver todo esto. Esto en realidad está
aquí. Nosotros tenemos esto. Este el es incompleto.
¿Por qué está incompleto? No debería estar incompleto.
Confirmemos lo que hicimos. Este es el pedido completo, el pedido completo pasó por el enviarlo a los eventos
completos. Nosotros estos cordones
completos o eventos. Estamos dando los eventos del
pedido completo aquí. Evento informático. Entramos aquí, vamos a ver eventos completos, juguemos con esto. Entraría y
escogería este identificador. Yo empujaría esto aquí. Empuje esto aquí. Entonces
volvamos a correr como ella. Déjame revisar los registros. Correo electrónico completado
intentando pagar el pedido, bien. Vamos a revisar. No estoy diciendo este pedido completo,
entonces, ¿qué está pasando? Vamos a confirmar. Supongo que por eso en realidad no lo es.
Por eso no está terminado. Confirma lo que está pasando. Cerró demasiadas pestañas abiertas. Cerremos todas las pestañas. Cerremos todas las pestañas. Vamos a entrar aquí, hacer esto viniendo aquí,
cerrar a este tipo. Entonces llamamos a esto
y esto entra, luego el evento, vamos a revisar
el otro servicio de eventos. Veamos qué está haciendo el otro servicio de
eventos. servicio de eventos publica
el otro evento, el pedido completo
publica el Intentar tomó esto
veamos esto. Esto contiene una marca de pedido
completa. Aquí. Déjame comprobarlo. ¿Esto está aquí? Sí. Este ha sido cargado en,
completo o marcador. Eso es genial. Usted
identificador que esto. La pregunta entonces es,
entremos aquí. Tienes los otros eventos. Los otros eventos
azuzan este pago entonces este tipo. Volvamos a revisar a este tipo. Evento terminado. La
parte terminada está pasando. Qué está pasando Este es
el tema que estamos teniendo. Este no está empujando
el completado o. Permítanme confirmar una vez
más a mi oyente. El oyente pasa por ella
está terminada orden, ¿de acuerdo? Leí para esto para esto, solo
cambiemos su
nombre a pedido terminado. No estoy seguro de que ese sea un problema.
Pedido completo. Pedido completo. Todo bien. Muy bien,
entonces esto es así, reiniciemos esto así voy a verificar este orden
que tenga este identificador, entonces debería
poder ver estos registros. Si veo este registro,
eso ha conseguido si
no veo estos registros,
entonces ese es el problema. Entonces veamos esto. Déjame entrar aquí hasta el rasguño y
tratemos de disparar esto. Veamos qué
pasa. Esto es cierto. Entonces vamos a revisar los registros. Intentar. No voy
a conseguir las partes. El correo que envías
intentando completar pedido para
completar el pago, ¿
verdad? ¿Dónde estaba ese registro? Intentar completar
el pago envía su envía su, entonces este oyente no lo
está recibiendo. Conseguirlo en este
oyente. Acabemos con este video aquí.
Esto es bastante largo. Terminemos este video,
luego volveremos a ver por qué esto no lo está
haciendo. Gracias.
34. Implementa el pago 3: Bien chicos,
pude encontrar el problema. El tema es éste.
Entonces el error o lo que omití fue este. Esto nunca
se registraría
si no usas
transacción, ¿verdad? Entonces esto fue lo que me perdí. Esto no estaba ahí
antes de volver a agregarlo. Creo que todo
salió muy bien. Entonces echemos un vistazo a
la tabla de pagos. Esto es incompleto. Pongamos este otro identificador. Entonces vayamos al escocés
y pasemos esto en. Vamos a ejecutar esto. Todo bien. Coloqué el punto de quiebre aquí. Entonces punto de quiebre solo para
verlo entra aquí. Entonces vemos, todo entra. Comprobemos esto ahora. Ya ves, está terminado. Todo bien. Eso básicamente es lo
que intentamos lograr. Pude hacer un poco de depuración y de hecho pude
averiguarlo. Sí. Lo que también
me ayudó a depurar fue depurado en realidad
colocó el nivel de inicio de sesión para depurar y esto para ver Dije que estaba
intentando registrarse, pero sin embargo, no se estaba
registrando, por así decirlo. Esto fue capaz de llegar a
darme más información. Todo bien. Sí. Veamos esto. Si miras esta crítica, creo que puedes simplemente
explorar esto un poco. Si miras esto
críticamente,
ves registrando publicación, verías cuándo está
tratando de registrarse. Ya ves cuando está
tratando de registrarse. Pero sin embargo, no pude
encontrar la otra parte, así que pude entender el tema venía de aquí que no
salió de aquí. Entonces viendo esto críticamente, vi la transacción y en
documentacionstalmente mejor, debes usar esto
. Derecha. Ahora poder terminar
realmente el concepto general
de lo que realmente estamos
tratando de construir y pudimos
reducir todo. Entonces, lo siguiente que queremos
hacer a partir de esta parte de aquí en adelante, creo que, antes que nada,
queremos que en realidad guardemos esto. Vamos a guardar esto. Permítanme
crear un tema para ello. Ahora solo llámalo pagos,
implementación, terminado. Implementación
concluida. Lo siento, chicos, puse eso en mi segunda
pantalla implementacion terminada, implementacion
terminada, ok? Bien, así que solo voy a
esto, solo voy a guardar esto. Así que escogeré a este tipo
y vamos a guardarlo. Entonces es commits
y luego Cos esto. Oh, no es de extrañar. Implementación. Bien, me estaba perdiendo eso. Permítanme editar
esta implementación. Bien, entonces creo que
se actualizó, así podemos cerrar esto y vamos a empujar así que hagamos que la
Guardia escanee Muy bien, entonces se pone
empuje. Bien. Todo bien. Entonces, a partir del siguiente video, comenzamos a mirar
cosas como la validación. Empezamos a mirar
cosas como validación, excepción, cosas C que vienen, chicos, cosas muy geniales que vienen. He visto video nido.
35. Excepción y validación: Chicos, muchas gracias
por acompañarme una vez más. Esto es Z aquí. Todo bien. Estamos hablando de modelos
abiertos, ¿verdad? Esto es exactamente de lo que
queremos hablar. Ahora hemos podido
explorar varios modelos. Básicamente exploramos
la interfaz. Esa es una
interfaz con nombre que quise decir que realmente somos capaces de
exponer el subpaquete. Ahora, hablemos de modelos
abiertos, ¿verdad? Básicamente podríamos tener un
modelo que esté abierto a todos, que todos puedan acceder. Un buen ejemplo que
traer a este video en particular
es la excepción, ¿verdad? Una excepción es un
muy buen ejemplo de, lo que podemos traer, que
estará expuesto a todos. Tendremos
la excepción para diferentes casos y
tendremos el manejador de
excepciones globales Para
que esto sea un
poco más interesante, voy a presentar
la validación de primavera,
el iniciador de validación de bood
de primavera para ayudarnos a lograr esto una
manera muy simple o
directa Traeré una validación. Esta es la validación. Estoy agregando una validación que
en realidad la tenemos aquí. Solo arreglemos
esto un poco. Tomaré esto
y
lo traeré un poquito
justo debajo de JPA Recuerda, el o no importa. Yo solo esto es solo la preferencia
personal, ¿verdad? Bien, así que hemos
podido hacer eso. También noté algo
rápido que en realidad
no creé, en
realidad no creé el modelo, el modelo de prueba para correo electrónico,
así que hagámoslo rápidamente. Lo haré antes de proceder.
Recuerda, cada modo debe tener un módulo de prueba separado para
que
puedas realizar un seguimiento de las cosas y asegurarte de que nada esté
realmente roto. Todo bien. Entonces voy a hacer esto. Simplemente entraré a mi Windows
y prueba rápida y cred
esto llamó a esto prueba de integración
de correo electrónico, ¿verdad? Todo bien. Prueba de Graion NT. Bien, así que recuerda, acaba de agregar
la prueba de mod de aplicación. Entonces solo para verificar solo,
solo para verificar, y eso en realidad
debería bastar En realidad debería bastar. Acabo de llamar a este
correo verificar si correo electrónico. Si correo electrónico. Eso debería hacer. Después, trae
y luego agrega prueba. En realidad ejecutamos esto
en un momento posterior para ver si todo sigue
funcionando muy rápido. Veré que todo sigue funcionando como se esperaba,
quise decir entonces. No obstante,
saltemos rápidamente para ver cómo
funcionará esto para la excepción. Proceder. Voy a crear un módulo llamado paquete
llamado excepción. Todo bien. Entonces voy a
crear una excepción personalizada. En esta ocasión, creo
que se trata de modelar, así que solo lo llamaré
modular excepción Sólo para hacer las cosas un poco más directas. Modilar excepción Entonces solo anulamos dos. Hagamos que se extienda. Hagamos que se extienda, excepción de tiempo de ejecución. Entonces solo anular dos. Voy a anular al que no tiene argumento y escribiré
el que tiene el mensaje. Creo que esto se perfila. Todo bien. ¿Qué otras
cosas voy a necesitar? Sí, quiero hacer de
este un modelo abierto, y convertirlo en un
modelo abierto en realidad es bastante sencillo. De la misma manera que en realidad
tenemos las cosas a lo largo del tiempo. Entonces tendré la información del paquete. Entonces en esta ocasión,
tengo el g. tengo el g,
luego spring framework, los modulos, modelo de
aplicacion de punto. Entonces esta vez, ¿qué tipo de módulo
estoy exponiendo el tipo? El tipo será módulo
de aplicación abierto. Estoy diciendo, oigan, chicos, que
este tipo esté abierto a todos. Esto es bueno. Esto es bueno. Haz esto abierto a todos. Sí. Bien. Entonces, creo que el siguiente
paso que vamos a hacer, intentemos correr por toda
la aplicación. Reemplacemos toda la excepción de argumento
ilegal, todas las demás excepciones con
esta excepción modulada Probablemente regresen
aquí y luego hagan las cosas y luego manejen las cosas
un poco mejor, ¿verdad? Creo que esa debería ser
la siguiente causa de acción. Bien, aquí no hay excepción. ¿Tiraste alguna
excepción en la configuración? No, no lanzamos
ninguna excepción. De hecho, vamos
a echar un vistazo a la realidad, vamos a echar un vistazo a vamos a ver la acción. Sólo mira a estos tipos. Sí, este es un caso. Este es un caso. Vamos a hacer cambiar
esto para modular. Cambio a excepción moderada. Cambio a excepción moderada.
Ahora bien, esto funciona bien. Esto funciona bien. Ahora bien, si realmente
estamos cambiando eso, en realidad
estamos cambiando eso. Vamos a seguir adelante. A ver. Recuerda, está abierto a todos, así que no deberíamos tener ningún caso en el que
realmente suceda algo. Aquí, en realidad podemos
lanzar este tiempo de ejecución. En lugar de tiempo de ejecución, campana
modular excepción, sólo pasando por sólo
ver este sistema
sólo se puede obtener el mensaje. Esto funciona. Entonces vamos a revisar
la acción del evento. La acción del evento
no tiene nada. Comprobemos la configuración. Comprobemos la publicación del
evento. ¿Hiciste algún
trabajo aquí? No creo que hayamos hecho nada ahora. No, aquí no hicimos nada. Repasemos el
inventario. Consulta el servicio. ¿Expuso algo
en este servicio? Veamos la
implementación del servicio. Oh, sí.
De hecho, podemos lanzar esto. Entonces sí, esto funciona. Entonces, creo que eso debería
ser para este tipo. Entonces revisemos la T. ¿Hiciste algo en el? No. Pasemos al otro. Solo estamos
pasando por solo reemplazar toda la excepción personalizada
como prometo que lo haríamos. Solo estamos reemplazando todas las excepciones
personalizadas para usar todas
nuestras excepciones
a nuestra excepción personalizada. Bien, veamos
el servicio de eventos. Bien, no hay nada ahí.
Entonces esto se ve bien. Comprobemos nuestro
convertidor de tipos, Sí. Sí, el convertidor de tipo
también tiene algunos cambios. Bien, entonces esto es bueno. Esto es bueno, ¿verdad?
Esto es bueno. Esto en realidad no está entrando, así que básicamente puedo
simplemente presentarlo. En macetas. Entonces esto está bien ahora. Todo bien. Puedo quitarme esto. Todo bien. ¿Qué más? A ver. El servicio de eventos no
tiene nada. O servicio, ¿
tiene algo? Creo que ya hemos pasado
por esto antes. Esto no tiene nada
para nosotros bien, esto está bien. Comprobemos el pago. El pago debe tener
el convertidor. Comprobemos aquí.
Vamos a cambiar esto. Ahora aquí podemos cambiar esto y esto debería
funcionar como es, como debería significar decir. Entonces tenemos los insumos. Entradas, entonces
tienes las entradas, luego tenemos la C, la Z,
el caso con cuerpo de resorte, luego la excepción, luego la estrella. Eso funciona. Bien. Comprobemos el servicio de eventos. El servicio de eventos no tiene nada. Bien, así que hemos
podido reemplazar todas las excepciones
dentro de la aplicación. Entonces esto estuvo bien. Entonces, si
ahora se muestra alguna excepción, esta se cortaría. Ahora bien, sabemos que con excepción de
lanzamiento, al parecer, necesitamos tener
un manejador general, ¿verdad Así que vamos a seguir adelante y crear
un manejador de excepciones globales. Seguro que ustedes ya están
acostumbrados a esto. Rápidamente
solo mencionaremos esto, lo
llamaremos global o llamaremos a
esta excepción global. Manipulador de excepciones, manejador de excepciones
globales y esto debería ser un consejo de control de
descanso Controlemos los
consejos. Miembro, esto también
es un componente.
Verificamos a través. Esto en realidad es solo
escribir un consejo de controlador, responsable el minuto de
descanso, básicamente funciona. Si revisas dentro de este tipo, este también es un componente para ser escaneado y para ser detectado. Todo bien. Con esto, entonces vamos a presentar un ¿sabes qué? Teniendo esto, así podemos
seguir adelante y sobrescribir podemos
sobrescribir algún método Ver, ¿el método puede
ser la lectura? No es así. Si quieres escribir el método, probablemente
quieras probablemente quieras usar querer básicamente extender el manejador de excepción de
entidad de respuesta y eso nos dará acceso Eso nos da acceso a. Creo que estoy más interesado en el argumento del método excepción porque una vez que realmente intentamos acceder desde la API realmente
y tenemos algún cuerpo algún cuerpo de solicitud
o algunas cosas en el controlador que se
detectarán y solo podemos meter excepción Comprobemos el
argumento del método no válido. Esto es bueno. Pero
en lugar de hacer esto, esto es en realidad una
exageración para mí. Podemos solo para que puedas
quitarte esto, no vas a hacer uso de todo esto, y yo solo eliminaré
la anulación. Con esto, si estoy haciendo esto, lo que
me sirve es que pueda simplemente colocar en el manejador de A
excepción aquí En el manejador de excepciones,
entonces queremos
manejar el argumento método, excepción
no válida Eso es caso de uso de subs. Entonces
revisemos también. Manejemos El ModuliteCeption, sí, el ModuliteCeption. Agreguemos la excepción del modelo. Entonces llama a esta entidad de
respuesta pública. Creo que necesitamos
tener un método de retorno. Vamos a llamarlo respuesta, ¿
verdad? Vamos a llamarlo respuesta. Llamemos a esto y manejemos modulif
Modulifeception. Bien, esto funciona. Entonces
llámalo ModuliteCeption Entonces sólo tienes que seguir adelante
para atrapar esto. Entonces solo traemos
esta copia y pegamos. Simplemente cambiamos a este tipo a. Entonces tenemos que
manejar los errores. Tenemos que manejar los errores. Pensemos en estos pedacitos. Pensemos un
poco en estos para manejar los errores. Probablemente deberíamos tener una
respuesta, como mencioné. Tengamos una respuesta.
Llamemos a esta respuesta. Yo básicamente debería ser récord. Debería ser un disco. Básicamente, solo
queremos regresar. Digamos este mensaje de cadena
y el estado HTTP, ¿verdad? Estado HTP. Creo que esto funciona. Entonces aquí mismo, puedes entonces sí, así que esto está bien. Entonces también queremos
leer básicamente la excepción
del resultado vinculante si realmente estamos usando el método. Recuerde que la excepción del
argumento del método en
realidad va a entrar en los lugares donde estamos haciendo algo como esto donde realmente
tenemos a este tipo, al parecer, vamos a colocar algunas anotaciones de RSC de validación Es por ello que introducimos
esta validación de inicio. Estar haciendo eso. Rápidamente solo vamos a
leer, vamos
a leer de la vamos
a leer de este tipo. Bien, ¿qué debo hacer? A ver. Para este argumento del
método, podemos tener una lista, ¿verdad? Tenemos una lista de errores. Solo devolvamos un mapa, un mapa, luego
pensando en pensar, deberíamos tener
un mensaje, un mensaje está bien, entonces puedes tener
una lista de errores, déjame hacerlo
tan simple como es. Hagámoslo tan
simple como es. No quiero complicar decenas, realidad
puedes
modificar tus necesidades Simplemente gire una lista de
cadenas porque esto puede devolver varios errores. Vamos a convertirlo en una lista
de cadenas y eso funciona. A partir de aquí, tenemos
una lista de cadena, lista de cadenas, creo que
es mejor si simplemente inferir del lado derecho Hagamos una excepción
a esos binarios increíbles. Esto en realidad solo hace
todo lo que necesito. Entonces de este tipo, ¿quiero para cada uno no? Quiero detener stream,
Stream después de streaming,
luego quiero mapear. Entonces quiero mapear el
error de campo, el error de campo. Quiero obtener el error de campo, lo llamaré error de campo. Entonces usemos método de
referencia método de referencia, luego obtiene el mensaje falso. Entonces es lista. Creo que
esto funciona bien. Creo que este
resto binario extra recibe pocos errores. Necesitamos pocos errores,
no todos los errores. Obtener pocos errores, obtener pocos
errores. Esto funciona. Entonces podemos
inferir a partir de aquí. Lista de llamemos a
los errores de campo. El retorno nueva entidad de respuesta, entonces creo que deberíamos rapir el
método privado que simplemente se pega en una lista de fielders que simplemente hará
esto más simple Ven aquí, privado. Mapa privado privado de mapa, luego cadena, luego una lista de
cadenas, luego lista de cadenas, luego simplemente
lo llamamos Obtiene error Era, luego cadena, luego temido errores Bien, esto funciona genial. Entonces, ¿qué queremos hacer aquí? Sólo queremos
dejar el nuevo hash. Bien. Entonces queremos
decir ratas ponen. Oh. Increíble.
Llamémoslo errores. Errores. Después pasamos en los
fildeadores, solo regresamos mapa Al regresar aquí,
solo llamaremos al mapa Gets r, luego pasaremos los palpadores,
filtros, eso funciona Entonces solo llama a los Netst's a
ver lo que piensa este tipo. Toma el mapa. Así es bueno pasar encabezados. Digo nuevas cabeceras HT, luego estado GTP, estado P. Estado, la solicitud de batería. Solicitud de batería. Creo que
esto funciona. Esto funciona bien. Entonces para esto, solo queremos
devolver la respuesta, solo
decimos devolver
nueva entidad de respuesta. Entonces
llamémoslo una nueva respuesta. Nueva respuesta, digamos x
obtiene mensaje localizado, mensaje localizado,
luego estado TP, solicitud
incorrecta, solicitudes incorrectas. Mala solicitud, entonces esto también necesita que la mala solicitud
tuviera solicitud. Derecha. Así que solo un
simple
manejo de exención simple solo para
atender realmente escenarios. Creo que lo hemos hecho bien. Sinceramente creo que
lo hemos hecho bien, ¿
verdad? Creo que
lo hemos hecho bien. Entonces con esto ahora, este es un caso típico de si no
tienes la excepción. Ahora bien, esto va a ser
genérico para todo. Tenemos que permitirlo dentro. Tenemos que decirle al modelo,
los módulos que se
heredarán,
como, oigan, oigan, chicos, por favor esperen
usar esta dependencia del modelo de excepción, modelo de
excepción. El caso típico
sería en el caso de, el caso del orden. Iremos al módulo O. Nosotros elegimos esto, se puede decir, Oye, también esperamos excepción
de excepción, ¿verdad? Modelo de excepción. De la
misma manera que podemos entrar, ¿la estamos usando dentro de este tipo? ¿Lo estamos usando aquí?
Sí, lo estamos usando aquí. A la derecha, sólo
podemos copiar esto para este mismo tipo.
¿Tan solo copiar esto? Entonces colóquelo dentro de inventario porque al parecer estaban
usando con inventario ahora, colóquelo dentro de inventario. Esto está dentro del inventario,
así que no necesitamos todo esto. Solo quieres
exponer excepción. Pero esperas esto
dentro de la excepción también. Publicación de eventos usándolo, este tipo ahora lo estamos
usando, ¿no? Sí, lo estamos usando. Podemos
usar esto. Podemos usar esto. Sólo vamos a usarlo en la base. Simplemente puedes elegir
lo mismo del inventario. ¿Somos mil? No. Ya que estás usando ahí, puedes simplemente
colocarlo aquí, ¿verdad? Coloca aquí también a este tipo. Entonces sí, el caso de uso está resuelto. Antes de continuar, ejecutemos rápidamente esta prueba. Entonces cuando ejecutemos esta prueba,
si no hay errores, entonces este video ya es muy,
muy largo. Entonces vuelve
a colocar realmente la validación y las anotaciones
en los objetos, ¿verdad? En los objetos en los que
realmente estás entrando
como el cuerpo de la solicitud, entonces puedes comenzar a
hacer algunas pruebas para ver si esto realmente
funciona con precisión. Bien, vamos a
probar esto para estar seguros de que
no se rompa nada Bien, podemos ver
que algo va, algo va mal, ¿verdad? Entonces, ¿a ver qué
pasó con el pago? ¿No lo colocamos en pago? Al parecer, el pago
ya se está quejando. Vamos a venir aquí.
Coloquemos la excepción aquí. Mostrar este
probablemente será el problema. Excepción. Excepción.
Entonces bien, todos los demás se ven bien Todo el mundo se ve bien. Bien, vamos a correr por
los pagos ahora, ¿verdad? Corremos por el pago. si el pago está bien ahora porque creo que eso es de
lo que
básicamente se va a
quejar pago , ¿verdad Chicos, sé que estos videos
se hacen muy largos. Solo quiero estar seguro de que
lleguemos a un muy buen hito, en lugar de
volver a arreglar y bug. Bien, ya ves, esto está
bien ahora. Esto está bien. Entonces veamos qué hay de
malo con el inventario. Creo que el inventario
tampoco estaba funcionando. Veamos por qué eventual no
se estaba ejecutando. Entonces, hagamos una prueba de
inventario, ¿verdad? Inventario, ¿cuál es el
problema? ¿Qué hice mal? Veamos por eventr
Bien, echando un vistazo. Bien, Eventr' también feliz. Entonces todo es feliz. Bien, chicos. Así
que voy a volver. No puedo comprometerme. No voy
a cometer esto aquí mismo. Quiero terminar
todo esto juntos. Voy a volver. De hecho,
ordeno a los demás. Bien, muchas
gracias por acompañarme. Nos vemos el siguiente video.
36. Excepción y validación 2: Bien chicos, muchas
gracias por acompañarme. Sí, bien. Este manejador de excepciones estaba en
realidad en el modelo
para el manejo de excepciones He podido
manejar un par por todos los que
en realidad hemos comprobado. Hemos cambiado toda
la excepción personalizada de tiempo de
ejecución a
esta excepción de tiempo de ejecución, excepción de argumento
regular
a nuestra excepción personalizada, podemos crear realmente el identificador de excepción global. Vamos a
probar esto. Colocamos puntos de interrupción, podemos ver si esto está funcionando bien como se
esperaba. ¿Todo bien? Lo siguiente que quiero que hagamos
es ir creo que el único controlador que
tenemos es en el otro modo, ¿
verdad? Ese es el otro módulo. Este otro módulo, en realidad estamos consiguiendo esto y esto o chicos. Comencemos a colocar una excepción
personalizada. Empecemos a poner
nuestra notación en esto. Por favor chicos notas, puedes
usarlo ha sido declarado, puedes usar la
validación en los registros. Estoy seguro de que algunas personas no conocen algunas personas realmente
saben una manera de hacerlo, pero puedes colocarlo directamente
sobre él y funciona bien, no tiene ninguno
no tienes ningún inconveniente Esto en realidad fue bueno.
Yo sólo lo colocaré. Voy a ser para las
cuerdas que estoy usando no en blanco. No en blanco, y sólo
voy a enviar un mensaje. Yo solo digo que el
nombre del cliente no puede estar en blanco. No puede estar en blanco.
Puede ser lob blank Creo que lo mismo
va para el correo electrónico. Simplemente llamaré al correo electrónico de este
cliente. Economía de correo electrónico del cliente en blanco. Entonces para la lista, si estás
al tanto lista Websi lista válida, solo
colocas físicamente
en válida en ella, en válida Sólo hay que ponerle una valida. El anuncio válido debe estar llamando
desde la validación de Yakarta. Entonces puedes ir
dentro. Este anuncio válido activará la validación. Este add valid activará la validación dentro de este tipo. Permítanme simplemente arreglar
esto para que
podamos tenerlo debidamente estructurado. Sí, podemos hacer esto. Al volver aquí,
también puedo tener esto voy a decir inventario
El nombre del inventario no puede estar en blanco, luego cantidad, coloquemos
la validación aquí. Usemos amina, la mínima. Al parecer, no queremos
ningún valor negativo. Nosotros solo decimos el mínimo, solo decimos que el mínimo que
queremos es uno, toma un largo si revisas, toma un valor largo y
colocando el mensaje. El mensaje mensaje
solo decimos el valor, el valor debe ser grande mayor el cero. Entonces uno también es
aceptable, ¿verdad? Mejor que cero. Entonces esto funciona. Creo que tenemos que probar esto, ¿verdad?
Tenemos que probar esto. Así que voy a ejecutar rápidamente esta aplicación.
Ejecuto esta aplicación. Vamos a mostrar mi vamos a estar seguros, déjame ejecutar
mi redacción de docker solo para estar seguro de que las cosas
están funcionando y funcionando Bien. Bien, este tipo empezó
bien. Aplicación de estudio. En lugar de aplicación, entonces
vamos a disparar algunas peticiones. Voy a estar usando lo que vamos a
usar como antes, pero esta vez
voy a omitir algunos valores Sólo vamos a cerrar este trabajo. ¿Sabes qué? Ejecutar
Déjame correr en el modo bug. Vamos a correr en modo de depuración.
Asegurémonos de que las cosas están entrando en nuestra capa de excepción. Entraré aquí, coloco
el punto de ruptura aquí,
coloco el punto de interrupción Para el controlador,
toda la anotación realmente coloca toda la anotación
realmente se colocará allí Esperamos que las cosas
no pasen de esta parte. Sí, eso me recuerda que
necesitamos colocar un
válido aquí en válido. Por favor, lo realmente importa. El otro realmente importa.
El otro en la materia. Realmente no sé
por qué, pero descubrí que tienes que colocar el válido
después del cuerpo de solicitud. Si coloca el válido
ante el cuerpo de la solicitud, no
se activa.
No es aparejador Creo que aquí nos perdimos
algo. No hemos puesto notación aquí, ¿verdad? No, no, no, no, aquí no hemos
colocado nada. Tenemos que hacer eso, chicos. Tenemos que asegurarnos de que esto
no es necesario que hagamos esto. Hagamos esto, por favor
no está en blanco. No estoy en blanco, en blanco, no, no, este pincel en blanco. No tengo en blanco, el
mensaje pin y el mensaje es otro identificador no puede
ser Oh, es obligatorio. Digamos que se
requiere,
aparte de que no se pueden requerir
cobijas. Nosotros solo usamos
lo mismo para los otros chicos. Vamos a estar seguro lugar tu chico? A ver. Se requiere. Entonces, lo que se requiere. No debería ser
mayor de lo que se requiere. Se requiere, se requiere. Creo que esto funciona.
Vamos a correr en el modo bug. Entonces, en realidad no estamos
tratando de hacer pagos. Solo quieres
asegurarte de que las cosas en realidad
no pasen. Solo estamos tratando de
asegurarnos de deshacer las excepciones. Bien, así que vayamos
a un bate rascador. Un rasguño. Aquí es donde
nos despidieron, Elia. A ver. Nombrémosle a este 55. Hagamos esto vacío. Hagamos esto vacío.
Nombre de la invención. Hagamos esto vacío. ¿Verdad? Entonces aclaremos esto. Vamos a ejecutar esto. A ver. Bien, ¿lo
ves? Esto fue capaz elegir nuestro método no
válido porque eso es básicamente lo que
escoge cuando llega
al controlador y los cuerpos de
solicitud que estás pasando no está validado o probablemente
lo validamos y encontramos errores. Esto es lo que sucede. Si
solo nos movemos, ya ves, ya
tenemos algunos errores,
que es un correo electrónico personalizado se requiere, se requiere
nombre de invención. Recuerdo que eso es exactamente lo
que hicimos si revisas aquí. En realidad, movemos
este correo electrónico del cliente y también eliminamos este uno
de los nombres de la invención. Vamos a correr esto hasta el
final. Tomemos una consola. Este es un mal pedido. Si vas adentro, vamos a
ejecutarlo de nuevo. Vamos a ejecutarlo de nuevo
esta vez. Vamos a soltarlo. Recibimos una mala solicitud. Si comprobamos, ves, cliente no en blanco, cliente, todo se obtiene
apropiadamente, mensaje
predeterminado se requiere
nombre de
inventario, nombre de inventario, vemos
que esto está funcionando bien. Esto está funcionando bien. Ahora bien, si has visto más de esta depuración, la razón por la que he visto todos
estos mensajes de depuración fue porque habilité la depuración mientras en realidad
estaba probando. Así que puse en modo depuración
aquí para módulo y este tipo, creo que ya que
no estamos depurando, déjame solo veamos Esto es depuración del módulo de pantalla. Vamos a comentar esto para que podamos sentar las cosas un
poco más amablemente. Solo reiniciemos esto. Empecemos esto y solo
ejecutemos la prueba una vez más. Vemos exactamente cómo
se ve. Vamos a mover esto
puedo ver esto. Todo bien. Así que mira nuestra excepción
realmente entrar en acción. Hemos podido ver que
la excepción entra en juego. Pero vamos a ustedes,
¿dónde está el resultado? El resultado siempre se
guarda dentro de este tipo. Creo que siempre se
guardó el archivo de Jason. Creo que es la última,
pero no estoy segura porque
estoy usando a este tipo para otra
prueba, otro proyecto. Así que déjame estar seguro.
Esto es 24 oh seis. Veamos seis oh uno. Creo que no es
reciente. A ver. Bien. Comprobemos esto. Bien, vamos a ver esto. Echemos un vistazo a esto.
Vamos a ver esto. ¿Bien? Creo que ¿cómo
abro esto de nuevo? Déjame pensar que debería
haber una tienda de este Jason File. Creo que es en algún lugar en la
parte superior voy a mostrar S. ¿Ves esto? Sí. Esto es. Entonces busquemos seis oh dos. Verás, este es el error. Esta es la respuesta que
obtienes. Esta es la respuesta. Porque lo estoy ejecutando
de cliente HTP otra vez, es exactamente la respuesta que obtienes si estás huyendo
de Postman, obtienes exactamente este mismo resultado Simplemente no quiero
salir de esta pantalla. Por eso
te estoy mostrando desde este lugar. Bien chicos, hemos podido validar que nuestra
excepción funciona. Alguien podría decir, ¿qué
pasa con esta otra excepción? Lo que estamos haciendo sólo
validando esta sección y esta excepción. ¿
Y la otra excepción? Antes de hacer eso, hagamos
rápidamente este pedido completo. Hay este
orden completo que
simulamos para modular la excepción y vemos cómo eso
realmente entra en juego. Tenemos que demostrar que
ambos realmente funcionan. Vayamos rápidamente a
rascar la parte otra vez. Entonces busquemos
el pedido completo. Nosotros colocamos el completo.
Este es el pedido completo. Vamos a hacer esto vacío. Hagamos esto vacío
y manejemos a este tipo. Verás, también llega hasta aquí, vamos a echarle un vistazo. Veremos qué es lo que es el alimentado o lado
cinco en realidad se requiere. Si vuelves a cero, si vuelves a donde realmente se almacenó
esto, como puedes ver, o se requiere
identificador. He podido
demostrar que
veamos otros lugares en los
que puedo simular esto. A ver, a ver,
a ver, a ver. Vamos quiero simular
la excepción modult, y eso es lo que
quiero hacer ahora mismo Vamos a entrar en el otro. Quiero ver cómo puedo
simular esto. A ver. ¿Cómo puedo simular esto? Porque aquí no hay excepción
int. Todo se ve bien. ¿Y qué tal veamos el pedido completo, el pago
completo? Bueno bueno bueno CC, tenemos esto aquí.
Aquí tenemos esto. Cambiemos esto olvidé cambiar esto.
No me di cuenta de esto. Cuando pasamos un identificador
que no existe, deberíamos obtener identificador de
pedido, no encontrado. Voy a decir u ordenar, no encontrado, orden con
identificación, digamos, orden. Con ID, no encontrado. Yo haré esto. Después con
ID, su ID no se encontró. Luego coloco dentro de esto, solo completo o puntos,
obtengo el identificador. Vamos a probar esto. Vamos a probar
esto. Vamos a probar esto. Lo que voy a hacer es simplemente colocar un punto de interrupción aquí
justo antes de que lo golpee, luego simplemente
lo ejecutaremos y veremos cómo funciona Mientras se acerca
esto, saltemos a un escocés malo. Esto es para arriba. Vamos a saltar aquí.
Sabemos que esto existe. Sabemos que esto existe.
Solo quitemos una carta porque
esto no va a existir. Vamos a encender esto. ¿Ves? Tenemos aquí dentro. Vamos a
ejecutar esto. ¿Ves? De hecho, llega a
la excepción moderada, lo que demuestra que esto también está manejando en todas partes la excepción de
trémolto Y esto también funciona. Si vas a revisar estas piezas aquí acabamos de
despedir esta solicitud. Ya ves, mal pedido,
bla, bla, bla, bla, ordena esta nieve encontrada y
nuestra respuesta la definimos, que contienen mensaje y ven eso es exactamente lo que
estamos consiguiendo aquí, que es este tipo del que
hablo este tipo Este tipo en realidad está pateando
. Entonces las cosas están funcionando. Las cosas se ven bien, ¿verdad? Estos se ven muy bien. Ahora, alguien podría
preguntarme, ¿qué pasa cualquier otra excepción?
¿Cómo lo manejas? Cualquier otra excepción se puede clasificar en
excepción de tiempo de ejecución, creo, por
lo que podemos entrar aquí y podemos manejar
para excepción de tiempo de ejecución. Puedes entrar aquí
y elegir un tiempo de ejecución. Una excepción de tiempo de ejecución que surge, esto
definitivamente la elegirá. Este puede ser el bloque
para la excepción de tiempo de ejecución. Puedes hacer esto y otras excepciones pueden
ser manejadas por esto. Esta podría no ser
la mejor fantasía. Quizás el mejor
enfoque hubiera sido que tuvieras una clase
como una clase base, una clase Bs o clase de respuesta
estándar
que toma en la respuesta, regresas a tu
cliente que
tendrá un dato T genérico, datos
pb que quieras devolver. Entonces tiene un
campo de error y mensajes. Entonces puedes hacerlo
genérico en lugar de usar una lista de mapas aquí
y esta respuesta. Simplemente puede ser el mismo
objeto genérico que se devuelve, el mismo objeto se devuelve
a los usuarios para esto. Entonces creo que esto lo
completa, ¿verdad? Este cómplice. Somos capaces colocar nuestra validación Starker Somos capaces de hacer manejo de
excepciones. De hecho, somos capaces de colocar la notación que
se supone que debemos, y la probamos y
esto está funcionando muy bien. Validación de clientes, toda
la validación personalizada y manejo de excepciones
es bueno, es bueno. Escribió prueba para la excepción
casi se me olvida eso. No olvides ningún módulo, ¿verdad? No te olvidas de ningún módulo. Lo que voy a hacer es
simplemente duplicar esto. Sólo voy a duplicar.
Vamos a codificar esto más bien, permítanme citar excepción,
excepción, excepción. Voy a solo para salir de la prueba, llamarlo prueba de
integración de excepción. Oh, yo digo, hay excepción también Oh, sí, excepción debería tener prueba. Hay un módulo. Cada módulo
debe tener prueba, ¿verdad? Entonces lo mismo que hacemos aquí. Entonces tenemos la prueba del módulo de
aplicación. Entonces dentro de esto
tenemos vacío, luego verificar. Vamos a
llamarlo verificar, ¿verdad? Entonces esa es la prueba. Entonces, vamos a pegarle a todo. Asegurémonos de que todo
esté funcionando como se esperaba. Vamos a golpear
todas esas pruebas. Nada debe romperse.
Cualquier cosa se rompe, arreglamos, entonces
llamaremos a este video. Traemos estos videos para cerrar. Cierra esto. Vamos a cerrar
todo esto cancelo parar, entonces quiero correr adentro, ejecutar nuestras pruebas. A ver. Pago, ¿
me vas a dar algún problema? Espero que no. Bien, vemos bien.
Estamos bien en eso. La excepción es buena. La instigación
es buena. Esto es bueno. Esto es bueno. La era es buena. Entonces la acción del evento
es buena, ¿verdad? Entonces la instiguón del correo electrónico es buena. Así que eso satisface
contigo. Muy bien, D. Esto se ha completado
con éxito. Entonces llegando al siguiente video, voy a comprometerme
esto. Voy a cometer esto. Entonces ustedes deberían
verlo en GitHub. Lo comprometo contra excepción y excepción y validación
personalizada, que no
tengamos que esperar solo en el video para verme hacerlo. Y en
el futuro, creo que lo siguiente sería entonces tocar algo
muy interesante, algo muy
interesante, que
entonces sería documentación, ¿verdad? Documentación documentación.
Muy bien, gracias chicos. Nos vemos. El siguiente video.
37. Documentación de Modulith: Bien, chicos, muchas
gracias por quedarte conmigo hasta este momento. Sí. Bien, entonces ahora mencioné el último video que vamos a estar
metiendo en documentación. Entonces,
lo genial de spin Modulf es que en realidad agregaron una característica de dónde puedes
crear diagramas De hecho, podemos crear
diagramas donde realmente
puedas mostrar
algunos de ustedes pueden mostrar exactamente cómo el mod es realmente
interactuar entre sí. Creo que es algo muy
bueno que deberíamos explorar, y eso es exactamente lo que vamos
a hacer en este video. Sin decir muchas palabras, vamos a saltar a ello. Lo primero que tenemos que
hacer es que necesitamos
crear una clase de prueba diferente,
una clase de prueba diferente. Dentro de esta clase de prueba, ahí es donde
realmente desencadenaría las cosas. Llamemos a esta
documentación, ¿verdad? Haciendo esto, entonces
crearemos una clase. Vamos a llamar a la prueba de
documentación de clase. Documentación Prueba de documentación. Ahora bien, esto no es parte
de la prueba de botas de primavera, así que necesito dejar
esto muy claro. No es parte de la prueba de libros de
primavera, así que no puedes seguir adelante a
anotar con nada, ¿verdad Sin embargo, este es el
formato que toma. Así que en realidad creas
un módulo de aplicación. Módulo de aplicación crear
un módulo de aplicación. ¿Por qué autocomplxe está haciendo esto? Módulo de aplicación. Modo de aplicación, el modo,
luego se crea una instancia
de modos luego se crea una instancia de aplicación, modos de
aplicación Entonces pasando estás
pasando tu clase base, Estás pasando esta clase base, ¿
verdad? Te vuelvo a escuchar. Estás pasando la
clase base. ¿Cuál es la clase base? Se llama muelle modelo
caso inicio rápido en él. Entonces el resorte el
módulo de resorte cruzan la clase de aplicación Pasas en esta clase
base porque este tipo está básicamente
en el nivel superior o se da cuenta en el nivel raíz que en realidad puede hacer la transición
a todos estos módulos Eso lo tenemos. Entonces
creamos solo una prueba. Esto básicamente será el
detonante. Creamos una prueba. ¿Qué estoy haciendo?
Prueba, luego nula. Entonces sólo lo llamaré
escribir documentación. Documentaciones Ns. A
documentación, fragmentos ¿Bien? Todo bien. Entonces comenzaremos diciendo
Nuevo Nuevo documento. Sí, nuevo documento. Después
pasando los módulos, en realidad
creamos aquí.
Pasando el módulo. Entonces solo di eso bien. Módulos derechos como planta UML.
Exploremos esto primero. Exploremos esta parte,
escribamos esto como planta UML. Entonces, lo que hacemos solo ejecutamos esto. Así que no necesitamos ninguna configuración
extra. Todo lo que tenemos que hacer
es ejecutar la prueba. Así podemos usar la prueba de
maving para ejecutar toda la prueba o simplemente usar atajo aquí o simplemente
ejecutar toda la prueba Entonces una vez que ejecutamos toda la prueba, lo que debería pasar es que luego
deberíamos ver dentro la carpeta de destino la
carpeta de destino que se está generando para Mving Entonces si realmente
estás usando un
Gdo comprobamos el archivo gden Pero para ver exactamente
para ver la prueba básicamente
escrita Entonces solo observemos vamos a
observar eso bien. Esto está hecho, observemos
esto deberíamos tener un archivo. Todo bien. Verás,
tenemos un archivo llamado Spring Modulate Docs Exploremos esta
primavera Modulate Docs. Esto es muy útil.
Todo bien. ¿Ves? Esto es simplemente increíble.
Esto es simplemente increíble. Ahora, agregué en
agregado en un plugin. Creo que el nombre del
plugin, no puedo recordar num. Creo que se llama Plant UML. Hay un plugin
llamado planta UML que instalé en realidad pude
conseguirme esto Normalmente, esto es lo que obtienes. Pero si no sabes
exactamente cómo hacer esto, lo que puede pasar es que puedas decir creo que cómo lo exploré
al principio fue decir plantas. UML en línea. Hago planta UML en línea. Así fue exactamente como
pude ir por eso. Hago planta UML en línea.
Entonces copia todo esto. Entonces lo pegas aquí. Entonces pegarlo aquí y esto debería generarlo para ti, esto debería generar
ves esto, esto lo
generaría. Pero si quieres
enchufar, solo ve si tu ID es compatible con la planta
UML y la tienes más, puedes simplemente
pasar por este enfoque Eso es
lo primero que realmente hemos explorado. El plan a UML Hay algo más que
básicamente estamos explorando, ¿
verdad? Ya ves que esto es increíble. Vemos exactamente cómo se conecta
todo. Vemos que el otro módulo es la guía principal que
desencadena todo. Uh, ya ves, Email escucha
los eventos desde aquí. Ellos Emil escucha a
depender de aquí. Se puede ver que los pagos
dependen de excepción. El inventario depende de la excepción. La acción del evento
depende de la excepción. Se puede ver incluso los
otros modelos ahí. Entonces esto solo te da una visión general
completa de
toda tu aplicación, que creo que es una muy buena representación
diagramática de cómo
funciona realmente la aplicación . Esto es simplemente genial. Esto es simplemente genial. Todo bien. También hay
algo más que podemos explorar. Podemos decir que también puedes escribir. Puedes ver que aquí solo
tenemos un dato. También se puede ver escribir módulo
individual individual como UML. Vamos a ejecutar esto de nuevo. Entonces hagámoslo.
Vamos a ejecutar esto. Individuales
cada uno de ellos uno por uno se escribirá
como el UML planificado Veamos exactamente
cómo funciona eso. Entonces ves que todo va a estar escribiendo uno
tras otro. Así que sólo vamos a
esperarlo. Todo va a venir en un poco. Sólo voy a esperar
a que todo termine. Todo bien. Bien. Bien, creo que terminamos. Creo que ya está hecho. Bien, vamos a explorar.
Impresionante. Impresionante. Para que puedas ver
todo cada modelo. Cada modelo que
entra. ¿Ves? Es depende de que demuestre con quién
está directamente vinculado. Sus ver veamos la
acción del evento. Acción de evento también. Ves que esta
publicación del evento es independiente. Recuerda, no hicimos
nada con esto,
esta publicación de eventos personalizados, que en realidad
modelamos la tabla
que se creó automáticamente para nosotros, Usando un GPA, pero no hicimos
nada con él. Yo solo te mostré cómo
podrías
modelar realmente , en realidad modelar una entidad contra esa
mesa y usarla a voluntad. Entonces el standalon de excepción
que otros están dependiendo ves, Inventario
es dependiendo de ello. Esto es bueno. Esto es bueno. Esto es bueno. También tenemos
otra opción que podemos explorar. También hay otra
opción. Permítanme cerrar todo esto excepto
revelar otras pestañas. También hay otro
que también podemos decir punto escribir moduva
Modos Modo Ves exactamente cómo funciona
esto. Vamos a ejecutar esto de nuevo. Yo sólo voy a correr por todo también otra vez. Esto se está
ejecutando a través de, vamos a ver algunas pruebas de
integración para que cargue el contexto cada vez que es por eso que
toma un poco de tiempo. Solo seamos pacientes
para permitir esta carrera, veremos exactamente
cómo funciona esto también. Entonces exactamente cómo funciona esto. También hay otra
opción una vez que hayas explorado esto donde
algunos podrían decir, am no me gusta plantar mil. ¿Hay alguna otra
opción? Sí, también hay otra opción
que estaremos explorando, permitamos que esto termine. Dejemos que esto termine. Dejemos que esto termine. Esto está hecho, vamos a
comprobar. Todo bien. Puedes ver esto esto
es tan lindo, ¿verdad? Te dice el paquete base, te dice a los oyentes de eventos
lo que está
escuchando y te dice qué eventos
escuchan aquí mismo Entonces si revisas
esta acción de evento, puedes ver, dice
que tiene un controlador. Vemos que tiene un servicio
llamado evento publicado. Entonces te muestra todos los beans, justo dentro de él, el repositorio. Echemos un vistazo a algo
más interesante. Comprobemos la O, ¿
verdad? Veamos el. Ya veo. La O tiene otros
eventos, otro servicio. Ves el repositorio, tenemos un básicamente, veamos, tenemos los
componentes, tenemos los servicios. Tenemos esto, el servicio de
inventario que conectaste
al evento. Verás, también tenemos
varias cosas co. Varias otras cosas de co,
¿verdad? Así que otras cosas cocinan. Por último, comprobemos el
pago. Ves que esto realmente entra. Entonces esto es realmente bueno.
Esta muy buena, hombre. Es bueno. Entonces esta es una documentación sólida
que se le proporciona, que solo puede
copiar físicamente y simplemente colocar ahí
afuera en su documentación
para que sea utilizada, ¿verdad? Bien, así que vamos a cerrar otras pestañas. Sí, también hay esta
opción que quiero explorar. Yo solo leo básicamente la
documentación en su contra. Vi algo fascinante. Que son las opciones daga, en realidad
podrías explorar Vamos a ver cómo
se ve. No estoy viendo como pero vi que podías hacer
algo como esto. Por qué quieres cambiar, estás pensando en
cambiar este valor predeterminado, cómo se ve a
algo un
poco tal vez más UML como a lo que
tradicionalmente estás acostumbrado Veamos cómo
funciona esto. cómo funciona esto. Vamos a
ejecutar esto de nuevo. Veamos cómo funciona esto.
Solo lo estoy explorando, ¿verdad? No sé si funciona
en conjunto con esto, tengo que quitar todos estos
y hacer que esto funcione bien. Pero este es solo tu estilo. En realidad, el estudio debería ser
escrito. Veamos cómo se. Veamos qué hace.
Veamos qué hace. Veamos qué hace. Esto se
acerca, que viene. Este tipo viene,
explorando cosas. Veamos qué es lo que le
pasa. Bien, hecho. Exploración de sets. Veamos esto. Veamos esto. A ver. ¿Cambió algo? No veo ningún cambio. No veo ningún
cambio, en serio, ¿verdad? Estaba pensando que va a
mostrar algo que nos muestre los diagramas de
URL más tradicionales, ¿verdad? Tenía la esperanza de ver eso. Bueno, creo que no estoy diciendo
que eso no va a surgir. Probablemente solo necesito
revelar forapestañas. ¿Hay para vincular a
este tipo con esto? Creo que esto es sólo por defecto. Entonces déjame sacar a todos
estos dos. Entonces, saquemos todos estos. Vamos a decorarlo, ¿verdad?
Veamos cómo funciona. Veamos cómo funciona este tipo. Sí, saquemos estos alpes. Llévate todos estos dos alves. Todo bien. Vamos a ejecutar esto de nuevo. Veamos qué pasa. Esta solo la última
carrera, solo digamos,
chicos, solo exploran
esto exploran esto. En la documentación,
se ve este estilo. Se ve bastante fantasioso.
Se ve genial. Esto es exactamente lo que vi. Sentí que esto estaría
bien, exactamente lo que vi. Gráfica tradicional de UO Modi
que es diferente a esta. Les llevé a Pablo a
mostrárselos chicos y vi que Koblar
podría lograrlo Este es el código para que
realmente esto funcione. Pero sin embargo, creo que no
estoy consiguiendo la
conexión correcta. Pero creo que ustedes pueden explorar y ver exactamente
cómo se ve. A ver esto si
conseguimos algo. A ver si
conseguimos algo
así . Creo que
no lo estoy consiguiendo. Creo que no voy a entender
esto ahora mismo. Bien. Sí. Entonces básicamente, esto
es un así que básicamente, esto es, esto es básicamente
las partes de documentación Estoy seguro de que los que hemos explorado son
realmente geniales, ¿verdad? Es realmente
genial. Creo que en realidad
podemos explorar algunas partes
más geniales, ¿verdad? Entonces cosas más chulas.
Próxima parada, sí. Siguiente parada, creo que
todos estarán explorando. Próxima parada, estaré explorando. Entonces ahora mismo como tenemos esto, puedes desplegar
esta reproducción. Se puede desplegar esta producción. Esto en realidad se rompería. Para implementar en producción, el conjunto de dependencia
necesita agregarlo para
soportar realmente el procesamiento en tiempo
de ejecución de spring modulate porque
como es así, es solo un entorno Eso lo estará viendo
en el próximo video S.
38. Documentación de Modulith 2: Muy bien chicos. Gracias
por volver conmigo. Se supone que es un
video
relativamente corto , un video muy corto. No quiero mostrarte
cómo se conecta esto en realidad. Acabo de echarle un vistazo otra vez. Descubrí que esto lleva una
discusión con las opciones de Dagam. Entonces solo tienes que hacer es
elegir a este tipo y simplemente
tirarlo dentro de este tipo y tirarlo dentro de este tipo y
debería estar bien. Eso básicamente debería
funcionar bien. Para el individuo para el individuo y para todo
el módulo, veamos qué otras
opciones hay. Si no tenemos UML. A ver. Tenemos
creo que solo UML y CFO No sé qué hace el CFO. Podemos simplemente explorar
B solo quiero
mostrarles los factores de
recolección. Simplemente ejecuto
esto rápidamente y ustedes pueden explorar cómo se ve CFOL,
cómo se ve UML Ustedes pueden escoger por defecto,
ustedes están usando. Veamos cómo se ve el
valor por defecto. Esto sólo está pasando. Creo que es CFOL por defecto, entonces solo elegimos
cual solo uno, ¿verdad? Así que solo quería
mostrarles cómo esto realmente conecta porque solo le
eché un vistazo. Básicamente acabo de revisar
la documentación nuevamente hoy
documentación mensual para ver
cómo se ve, y yo para descubrirla. Así que solo pensé que en realidad
debería
dejar caer esto rápidamente pero ser
importante para algunos. ¿Bien? Así que vamos a comprobarlo.
Impresionante, así podemos ver. Esto se ve bien, ¿verdad?
Esto se ve muy bien. Esto se ve muy bien. Entonces solo
quería mostrarnos esto para la serie individual. Entonces solo quiero
mostrarnos esto y
creo que sí, gracias chicos. Entonces podemos pasar al soporte de tiempo
de ejecución.
Gracias. Adiós.
39. Soporte en tiempo de ejecución y actuador: Sí, gracias chicos
por acompañarme. Ahora estamos hablando
del soporte en tiempo de ejecución. Recuerda que mencioné que
esto no puede ir a producción si no
tienes el soporte de tiempo de ejecución. El soporte en tiempo de ejecución es
muy clave para que lo uses. Y para mostrarte cómo
vamos a agregar dependencia, al mismo tiempo,
también estaremos introduciendo
actuador ¿verdad? Para aquellos que están
al tanto del
actuador, el actuador en realidad
nos ayuda a darle métricas, que puede enchufar para permitir aquí
obtener realmente las métricas y exponer así sobre esto en el
grafo, ¿verdad? Eso funciona. Así que básicamente, sólo les voy a
mostrar la caja chicos. Para demostrar correctamente esto para demostrar correctamente esto, iré a iniciar spring dot
IO iniciar el spring dot IO. Ahora bien, si tuviera que agregar dependencia
indirectamente a través de mi
increíble intellig, tal vez no veamos
todo lo que necesitamos agregar Lo que haría para que veamos para
que no nos perdamos las cosas, voy a seguir adelante y agregar en Modulf ModulFF solo
veo que parece Agreguemos en JPA,
para ver todo. Vamos a agregar en Lombok. Derecha. Vamos a agregar en el actuador. Ahora bien, esto es exactamente a
lo que me refiero, actuador. Entonces también, entonces creo que lo
tenemos todo. Ahora, lo que haremos es entonces, entonces exploraremos a este maven Explorando esto, si lo
miras correctamente, verías que
tenemos actuador. Ahora mira esto.
Contamos con actuador y también tenemos actuador
modular Entonces tenemos observabilidad para aquellos que quieren
usar la observabilidad, cosas como si quieres usar micrómetro,
quieres usar micrómetro, y quieres usar una implementación
específica para Sí, básicamente, eso tiene
diferente especificación. Entonces con mi viajera, entonces
puedes decidir dependiendo del
entorno en el que estés trabajando, agregar en podrías
agregar en Datadog, dino trace, prometheus, telemetría abierta Entonces podrías agregar un controlador de pila. Entonces hay varios que
podrías agregar para la observación. No estás lidiando con
la observabilidad en este curso. Este curso es básicamente
solo para mostrarle exactamente cómo agregar realmente el
actuador y el soporte de tiempo de ejecución. Así que rápidamente solo mostraré
otro poco más para que
veamos cómo funciona esto. Entonces el soporte de tiempo de ejecución, esto es exactamente lo
que esperabas agregar. ¿Correcto? Este es el soporte de tiempo de
ejecución si vas a la
documentación de spring moduli, se espera que
agregues en este tipo, cual es esto, ¿verdad Así que sólo copiaremos esto. Voy a cerrar a este tipo, volveré a nuestro proyecto.
Volver a un proyecto. Voy a bajar justo antes de
la prueba, voy a añadir en esto. Entonces además, entonces me iría entonces
al actuador,
recojo el CTATorPick el Sólo estoy tratando de
mostrarles cómo lo harían si
no están usando Intellig En ambos sentidos, funciona. Después añadimos el actuador,
después volveré. Voy a volver. Después bajar, necesito también el
CTRedf moduli lo, no
voy no
voy el momento en que agregas
en observabilidad, probablemente porque probablemente
podría estar esperando Zipkin Zipkin podría haber
sido configurado Mcmmeter te puedo asegurar que siete han sido autofigurados,
que empiezas He probado esto
y descubrí que
si no tienes esas
cosas en tu camino de clase, empiezas a tener problemas,
por eso
no voy a agregar la parte de
observabilidad Yo solo voy a agregar solo las cosas
importantes que necesitamos, habiendo agregado esto,
vamos a ejecutar esto. Vamos a correr las piernas en esto. También quería mencionar que la última
documentación que agregamos, he comprometido
al GitarPpository,
bajo documentación, documentación del
módul, para que la
puedas encontrar
ahí para ver exactamente los
cambios que ahí para ver exactamente los Ahora que esto ha sido cableado. La siguiente pregunta entonces es,
¿cómo conectamos esto? Esto es tal como
sabemos, como de costumbre, es justo la misma
implementación que estamos muy conscientes de
donde se está utilizando actuador. Yo sólo voy a entrar aquí. Ahora
tenemos el apoyo de tiempo, así que las cosas deberían funcionar tal como están. Yo sólo voy a agregar en la gerencia. Gerencia, entonces quiero
incluir la gerencia. Entonces traigo puntos finales. Quiero traer punto final. Entonces quiero la exposición
Bit ma no estoy excluyendo, quiero incluir
lo que quiero mostrar. Incluir incluir. Entonces solo muestra la salud.
Vamos a mostrar la salud. Vamos a mostrar modulf's
show modulif porque esta es la palabra clave
que necesitamos modulf
Vamos esta es la palabra clave
que necesitamos modulf
Vamos a mostrar esto. Todo bien. Vamos a empezar la
aplicación y vamos a golpear el
punto final para ver eso? Vamos a darle a esto. Mientras se acerca
esto, entonces
vemos exactamente
cómo surge esto. Una vez que eso está arriba, entonces
trataríamos de
ver todos los actuadores que están fácilmente disponibles para
nosotros, fácilmente disponibles. Déjame que esto esté disponible una vez hecho esto, ¿está hecho? A ver que se hace. Esto está hecho. Esto está
hecho. Vamos a entrar aquí. Vamos en Loco
host ocho actuador. Todo bien. Para que puedas ver modelarlo. Módulo está disponible. Entonces, una vez que haces clic en
modelarlo, boom. Entonces vemos todo lo que tenemos a nuestro
alcance. Por lo que nos muestra el modelo de
excepción, el modelo de acción de eventos. Vemos el modelo de invención. Ya ves el otro modelo. Ves este modelo. Entonces creo que ustedes están donde pueden ver
esto ustedes mismos, ¿verdad? Pero sí digo una cosa. Aparte de ver las cosas
como ya evento, ¿por qué no te paras en
el hombro con gigantes? Entonces hay algo llamado
el personalizador de salud
o el personalizador de actuadores,
básicamente, el
personalizador que tenemos Puede crear un punto final
personalizado, que puede agregar al actuador, pero eso está más allá del
alcance de este curso. Como se quiere llamar
alcance de este curso. Básicamente puedes leer botas de
primavera en la práctica, botas de
primavera en la práctica. Si tuviera que recordar al autor ahora,
creo que
las botas de primavera
en la práctica es de So
Nat Msib SNT Msib la puedes encontrar en la puedes
encontrarla en ¿Puedo recordar ahora
, manejando Nat Msib SNT Msib la puedes encontrar en la puedes
encontrarla en ¿Puedo recordar ahora
, manejando Manning.com. Te muestra cómo
crear una costumbre personalizada de trator puedes
construir este empalme Bueno, vamos. ¿Por
qué querrías construir esto? ¿Por qué no te
pones esto en ti mismo? ¿Por qué no te limitas a
poner esto pone en el actor modular y exponer todo lo que
necesitas de inmediato Eso simplemente
funciona de inmediato. Todo bien. Yo quería
mostrarles cómo esto. Probablemente solo intentemos
exponerlo todo. A pesar de que dijiste que
no hicieras esto. No siempre hagas esto.
Tratemos de exponerlo todo. Veamos cómo funciona esto, ¿verdad? Lo siento, creo que ya que
estoy usando Yarmo, necesitaría un Voy a
necesitar un código aquí, si me equivoco, voy a
necesitar un código aquí Supongo que por eso está funcionando. Creo que a partir de ahora siempre
necesitas un código que estés usando Yamo Pero si estás usando
aplicación de propiedades, básicamente no
necesitas que esta no
funcione pero Esto no es
reconocido por Yam, así que tienes que
colocarlo dentro de los códigos Bien con esto hecho, vamos a golpear el actuador. A ver. Todo bien. Veremos todo lo disponible,
todo lo disponible. Básicamente así es
como lo colocas. Ahora esto está disponible para
ser desplegado en producción, esto está disponible para ser
desplegado en producción. Alguien podría preguntarme,
¿a qué te refieres con que estamos
bien ahora mismo Oh, sí, esta es exactamente la aplicación
que quieres crear. Todo sigue
igual. Tus propiedades, probablemente
quieras
mover las cosas. Recuerden que mencioné algo
clave que el componga, deberíamos estar moviendo el archivo de
componer, ¿verdad? Deberíamos estar quitando
el archivo de componer cuando queramos docorizar Estamos listos para docorizar
cuando coloquemos esto en. Entonces creo que
lo siguiente será explorar. Queremos empezar a
mirar digamos, continuando esta aplicación, ¿no? Vamos a continuarlo. Spring Boots tiene esta
increíble integración
con la continualización Entonces lo
exploraríamos en el siguiente video. Todo bien.
Gracias chicos. Creo que fuimos capaces de lograr lo
que queríamos lograr aquí. Gracias al ver el siguiente video.
40. Docker: Muy bien, chicos, físicamente se están acercando
rápidamente al
final de la costa Todo bien. Quiero
hablar de documentación. Perdón, voy a hablar de
continización, quise decir. Hablaré de la continización. Al parecer, sabemos que la mayoría las aplicaciones creadas
en esta época, realidad hay
que
contenerizar, luego tenerlo desplegado
en algún clúster, uberttis o Deco nadó, o incluso si es solo un frasco, aunque sea solo un jar, lo cargues Hoy en día hay varias opciones en las que podrías implementar tu
aplicación, ¿verdad? Pero esta particular industria del
video tienes
que continizar Dcorize Primera opción les voy
a estar mostrando chicos, y les mostraré
los pros y los contras de algunos. Soy una profundidad continua sobre
esto solo para mostrarte. Lo primero que
quiero mostrar es que no necesitas hacer nada. No hace falta agregar ninguna
dependencia aquí en absoluto. Spring Boots viene en
totalmente integrado. Me integro totalmente
con Docker. Hasta ahora, tienes
un tiempo de ejecución de Docker ejecutándose en ese entorno, básicamente
podrías
simplemente ejecutar este comando Simplemente ejecute este comando.
Déjame mover esto hacia arriba. Vamos a despejar la pantalla. Vamos a conseguir esta
pantalla. Simplemente corres. Lo diré porque
espero que todos vean,
pero solo asumamos, asumamos que todo el mundo ve, pero déjeme
decir Maven, Spring, si lo estás ejecutando
desde la consola, asegúrate de que tu versión de Java sea la misma versión que se
ejecuta en el entorno Entonces si hago versión Vn, creo que deberías
tener al menos la versión tres punto ocho,
si no me equivoco, 38, la mía es 39 o seis, y estoy ejecutando Java Versión 21. Si no estás seguro, también
puedo hacer VN puedo hacer versión de
guión Java, ¿verdad Versión de guión de Java, ¿verdad? Se puede ver que estoy ejecutando Java 21, que es totalmente
lo mismo que en lo que estoy ejecutando esta aplicación. Entonces lo que pueda entonces solo
puedes ejecutar Maven, botas de guión de
primavera, luego Eso es todo lo que necesitas
hacer. Tal vez enVn espacio, botas de guión de
primavera,
columna, imagen de guión dued. Solo ejecuta esto y esto
es todo lo que necesitas hacer. Esto es básicamente
todo lo que necesitas hacer, y automáticamente
dockerize todo Ejecuta toda tu prueba y recuerda,
puedes saltarte tu prueba. Así que Saltar la prueba es muy sencillo. Todo lo que necesitas hacer es
dashi D, luego saltarte la prueba. Yo sólo escribiré un comando
después de que se acabe todo. Es solo que con
algo como esto, NVn ejecuta unas botas de guion de primavera Después las botas de guión, luego
Bud, imagen de guión, luego D, D, saltar las pruebas deberían saltarse la prueba y debería
ser la imagen para ti Se puede ver que esto ha conectado
y es belleza la imagen. Ver la imagen es primavera corte
moderado, 001 snapshot. Alguien me puede preguntar, ¿Y
si no quiero este 001? Muy fácil. Puedes ir a
tu ir a tu maven Después vas a MVN
Mv en este curso. Yo solo me concentraré en Maving. En la sección Pero, hay algo que se llama el nombre final. Puedes crear tu nombre
final aquí, y esto realmente lo tendrá. ¿Qué
puedes ver también a todos estos tipos, ves cuál es el nombre? Ves el nombre. Ves la
versión, puedes evaluarla. Identificador de artefacto de artefactos,
puedes evaluarlo. Básicamente puedes hacer si
quieres puedes hacer esto. Puede hacer ID de artefacto. ID de artefacto, tal vez hay guión. Entonces puedes colocar
en la versión si así lo eliges. Versión, ¿verdad? Y puedes colocar en alguna otra que cosas geniales aquí
si quieres, ¿verdad? Y esto para escoger
la identificación del artefacto. Tú eliges esta identificación de artefacto. Tú para escoger tu versión, esta versión
en la que colocaste, necesito correr, ¿verdad? O si quieres
algo nombre personalizado, entonces puedes simplemente hacerlo aquí,
y eso debería funcionar. Entonces para los que no están
bien con este nombre, eso es lo que estoy tratando de
mostrar si no te gusta este nombre, solo usa esto. Solo usa esto y
personalízalo como quieras. Quieres mostrar para aquellos
que quieren que se cambie el nombre. Así que esto es, ¿verdad? Entonces esta es la primera opción. Entonces vemos que esto
sigue construyendo. Vamos a permitir que
se construya. Entonces nos enfocamos en la segunda opción. La segunda opción
segunda opción requiere que crees un archivo
llamado Dockerfile Archivo Docker. Entonces cortaste el archivo Docker en la
raíz del proyecto Una vez que cortas el archivo Docker
en la raíz del proyecto, entonces comienzas a escribir
tus comandos No voy a tomar tiempo
en escribir comandos. Ya lo estoy escribiendo, así que
lo traeré aquí, ¿verdad? Entonces solo para hacer las cosas
lo más simples posible. Así que lo
traeré aquí, ¿verdad? Entonces este es un
comando básico, ¿verdad? Yo sólo voy a aquí y
solo sacaré esto. Así que vamos a, uh bien. Entonces deberías estar
en como referencia. No voy a
sacarlo. Entonces este soy yo. Este es mi correo electrónico, ¿verdad? Este es mi correo electrónico, probablemente
podrías enviarme un correo electrónico
si lo eliges. Envíame un correo electrónico para
solicitar algunas cosas geniales. Eso es genial. Todo esto
es todo lo que necesitas hacer. Todo lo que necesitamos hacer solo
Amazon Coreto, usar Amazon. Amazon Coreto. Soy un gran fan
de Amazon Coreto, ¿verdad? Amazon Koreto entonces hazlo 21. Amazon Care a 21. Entonces sí, físicamente funciona. Sí. Espero haber deletreado
Amazon Coreto correctamente. Pareciendo, Bien,
sí, correctamente. Así que primavera en Amazon Coreto
y es todo lo que necesitas hacer. En primer lugar, se ven
las imágenes construidas. Soy un gran fan de
usar la línea de comandos, pero también puedo azotar a este tipo Ese es el contenido de Docker
van a las imágenes. Así que vamos a escribir en primavera. Refresquemos esto porque solo
podríamos traer en primavera. ¿Ves? Esto es.
Esta es la imagen. Tenemos nuestra imagen pero, ¿verdad? Impresionante. Cosas geniales, cosas
geniales, cosas geniales. Cosas geniales. A continuación,
¿qué quiero hacer? Me lo he quitado, lo
he borrado. Vamos a entrar y luego ejecutar esto. Vamos a ejecutar este archivo. Yo solo
proteico. Vamos a ejecutar esto. Ahora, para que esto corra, debes tener tu imagen. Debe tener al menos su expediente
Ja pero el archivo Ja. ¿Cómo se ejecuta el
archivo Ja? Muy sencillo. Ejecutar el Jahi acaba de hacer VN. Déjeme aclarar esto. Estos son parte del proceso de DevOps, ¿verdad? No tienes que
saber todo esto. Pero sin embargo, si
te interesa, solo BN limpia el paquete
o simplemente salta la prueba. Empaque, luego la prueba de omisión. Eso es todo lo que necesitas
hacer cuando ejecutas esto, esto debería construir
este archivo por ti. T debería construir este
archivo Ja, construir este archivo Ja. Ahora, vamos a explicar lo que estoy haciendo aquí antes
por qué está funcionando esto. Sólo digo, oye, usa Amazon correct como mi imagen base. Entonces el mantenedor
es solo un nombre solo una etiqueta,
no hace nada Diciendo quiero archivo coda angumen. Creo que quiero
modificar esto un poco. Modifico esto un poco. Hagamos algo
un poco textual. Hagamos algo un poco textra. Lo que quiero hacer es que quiero copiar
todo, desde un camino de un camino a este en
lugar de usar esto directamente, quiero copiar
todo, desde un camino a Snot, no
veamos, no, veamos no Quiero copiarlo todo. Esto funciona si
tengo una dependencia, pero no quiero usar esto,
quiero algo extra. Déjame pausar este
video tan rápido corre de nuevo. Porque no quiero perderme
este un paso importante. Solo necesito traer solo
copia en mi archivo de destino. Necesito copiar este archivo
en el contenedor, entonces solo lo asigno aquí. Sólo un minuto. Muy bien chicos. Muchas gracias. He
podido modificar esto. Yo solo quería conseguir algo así que no te pierdas la
parte importante que quiero mostrarte. Así que volviendo atrás,
acabo de añadir que expongas la olla que quieres usar. Entonces como pueden ver, en realidad
estoy poniendo
un argumento. Este argumento debe centrarse en cualquier cosa que termine con un
jar de puntos en la carpeta de destino, que es exactamente
cuál coincide con esto. Esto termina con el tarro de puntos.
Esto no es el tarro de puntos. Entonces esto termina el dot jar, luego luego copio lo que
hay en esta parte, que es el objetivo el Javier. Luego lo copio y lo
nombramos para updo jar. Una vez que tengo la q agradable
al punto de entrada como Java, esto significa que todo
es una línea recta. Sólo lo estoy
rompiendo por legibilidad. Entonces puedes establecer la zona horaria. Entonces, sea cual sea el país en el que
estés y los estados, que es exactamente
lo que estoy haciendo aquí. Estoy en África y estoy
grabando desde Legs. Y el jar, al parecer, cuando
quieres ejecutar en Java, básicamente
haces guión Java
guión Java hyphen jar, luego el nombre de
tu aplicación, digamos abc dot Eso es básicamente lo
que haces. Pero ahora mismo, estos son los argumentos adicionales
que en realidad agregas. Me salto estas razones. Esta es la parte donde se
agrega el perfil de resorte activo. Esta parte es de
perfil de resorte activo. Entonces puedes establecer un perfil
tal vez de resorte. ¿Correcto? Entonces, una vez que establezca su
perfil, sea cual sea el perfil, lo que sea que le asigne a
esto será lo que se conectará a esta imagen
para su uso. Puedes explorar. Yo sólo quiero mostrarles
que también es posible. Entonces, ¿cómo hago esto? Simplemente
ejecuto este comando básicamente. Yo sólo ejecuto este comando. Voy a explicar lo que hace
este comando. Este comando básicamente significa. Significa que tu Docker, construyes Dash T significa que
quieres darle una etiqueta Si no le das una etiqueta,
solo elige un nombre aleatorio. Verías el nombre que realmente
va a usar, ¿verdad? Entonces eliges una etiqueta, y
una vez que escojo la etiqueta, le doy un nombre Módulo
es un punto cero, luego puntos significa aprender en
la diatría de trabajo actual ¿Cuál es la actual
diataria del ala? Lo haces Como está demostrando que
actualmente estoy en la
carpeta raíz de este tipo. Ahí es donde puedo
ver mi archivo Docker,
bien, mi archivo Docker Así que voy allá
y ejecuto esto, ¿verdad? Y como pueden ver, ya he
corrido este comando antes, así que va a ser bastante rápido porque
deberían ejecutarlo antes,
antes que nada,
descargar el Amazon Coreto realmente les muestro chicos Entonces esta es la segunda
opción, ¿verdad? Esta es la segunda opción, chicos. Entonces déjame seguir adelante
para eliminar a este tipo. Bien, así que lo eliminé
de mi registro Docker. Entonces vamos
a comentar esto, ¿verdad? Entonces la opción final que
quiero mostrarles chicos es esta para que puedan ejecutar las
tres opciones dependiendo de ustedes. Ahora, traje esto porque
en caso de que quieras agregar tu zona horaria porque mayoría de la gente tiene
problemas con la zona horaria. Una vez que agregas
zona horaria, la
fecha y hora local que estás usando para
ejecutar el día local, las fechas de
la fecha a
partir de lo que estás usando tu aplicación Java
se ajustarán a esto, verdad? A esto lo confirmaremos. Yo sólo quería mostrárselos chicos. Entonces finalmente, hay algo llamado herramientas de capa, ¿verdad? Herramientas de capa donde
rompes el sabor, luego tu frasco de grasa,
dentro de tu carbón gordo, las
rompes ¿cavas profundo y realmente
usas el lanzador Este cambio en la primavera tres, creo que en la primavera dos,
hubo que no tienes este lanzamiento. Entonces solo g para hablar framework que arranca el
cargador, el lanzador Ja. Pero en esta ocasión, primavera tres de hecho
introdujo esto. Espero estar en lo cierto, agregó esto. Entonces esta es scala
que necesitas correr. Esto en realidad está en la lista, por lo que en realidad
solo puede usar esto directamente. Lo mismo,
eliges el Amazon Coreto, en realidad
lo configuras como una compilación Entonces directorio W, W directary, solo
estoy cambiando directorio W. Dictry de trabajo significa que si esto
no existe, cambiará. Ahora bien, ¿por qué es esto importante? Uh, hay esta escuela de
tha que dice que no está bien correr porque dijiste Linux es
un contenedor de linux, imagen para ser un contenedor de linux. La escuela de esos ensayos
no está bien para ejecutar
tu aplicación en el directorio raíz de
un contenedor Linux. Entonces cambia el directorio de trabajo. Si usas el directorio de trabajo
si esta parte no existe, para crearla
automáticamente para ti. Entonces esta opción. Entonces ya hemos visto este
comando antes. Te muestro una, te muestro
este comando er también. Después corres la capa dos. Esta capa dos extraerá dándote todo esto,
obtienes todo esto. Uh, te hubiera mostrado que
este video es bastante largo. Te habría mostrado una vez que realmente abras el hecho,
obtienes todos estos archivos, ves todos estos archivos
dentro de él, ¿verdad Todo esto realmente existe
dentro de tu factu, ¿verdad? Después copias desde build. Esto es solo que está
ejecutando las cosas a
un nivel más gnual en lugar de esto solo
corriendo el hecho Yo prefiero esto. Entonces al final, sólo voy a recoger esto. Este comando también es
importante en caso de que quiera
establecer en caso de que quiera
establecer mi zona horaria, así que solo ejecuto esto
puedo ejecutar esto también. Inteligente me da el hábito
de simplemente ejecutar esto directamente, solo
voy a correr desde la línea de comandos en
caso de que estés desplegando, solo
ejecutaré el mismo
comando, solo lo golpeo. A ver. Lo mismo, lo descompone todo, entonces es capaz de
conseguirlo realmente, ¿verdad? Eso es básicamente todo.
Eso es básicamente todo. Yo sólo quería mostrárselos
chicos. En realidad, tres chicos son tres formas de
construir realmente tu imagen. Estas son tres formas geniales
de construir tu imagen. Cualquiera que sea la
forma que elijas, usa N. Así es como
construir tu imagen Entonces puedes ejecutarlo. ¿Cómo corremos? Yo sólo puedo elegirlo. Entonces no configuré mi perfil. Entonces lo que puedo hacer es simplemente decir que Duka corre. Eso debería ser B, entonces creo que si estoy en lo
correcto, 880, 80 80. Entonces vamos a darle un nombre. Vamos a darle un nombre. Sólo diré que esto debería ser una columna. Perdón, déjame plastilar
esto. Déjeme aclarar esto. Claire. Sólo Clare esto Entonces justo en esto entonces 80. Recuerda que configuré esto. Esto podría ser un problema. Conjuntos no puse el creo que
debería estar bien. Debería estar bien.
Estaba pensando que estaba usando este conjunto
el perfil de resorte. No configuré el perfil de resorte. Si esto entonces vamos a tener un nombre. Vamos a llamarlo N, entonces solo lo llamaré modulf Modulate debería ejecutar
como Modult como contenedor Entonces recuerda que
ya he corrido esto, así puedo escoger. Vamos a la imagen.
¿Dónde está la imagen? Busquemos modulth. Esto es modulif sin usar. Entonces solo di modulif y esa es una des porque
esa es la versión que Ese es el objetivo
Cambiemos el nombre por
algo mejor. Vamos a llamarlo como MOD
MOD. Vamos a ejecutar esto. Creo que lo soporta
dash dash nombre ahora? Dash Dash nombre nombre. Creo que esta se requiere. Sí. Se puede ver pix default, esto se ejecuta, solo ejecuta la aplicación. ¿Cuál
fue el error aquí? Sí, estoy seguro de que ustedes están al tanto de por qué sucedió esto
en realidad. ¿Correcto? El
motivo por el que sucedió es porque no me he mudado. Todavía estoy usando mi D, este chico de niños, ¿verdad? Entonces para eso tenemos que mover
todo aquí, ¿no? Tengo que moverlo dentro este tipo
para que puedas correr. Entonces probablemente
deberíamos hacerlo rápidamente. En esta ocasión, ya no se
utiliza el soporte Docker. Entonces tienes que sacar el soporte Docker que estás
moviendo hacia la producción Entonces solo les estoy enseñando a
ustedes cómo hacer esto para que no
tengan ningún reto. Tienes que comentar esto, quitar esto. Lo siento.
¿Qué estoy haciendo? Esa debería ser la puerta en el momento
equivocado. ¿Fue otra vez? Hacer coche mal momento. ¿Me resulta difícil ir
niños? Mis dependencias. Esto es. Yo sólo puedo quitar esto,
luego refrescar esto. Entonces solo copio lo que
usamos en la carpeta de prueba. Yo sólo coincide
exactamente donde tu. Partidos solo voy a
recoger a este tipo. Entonces vamos a entrar aquí, solo tirarlo a este tipo. Entonces haz esto, entonces solo
voy a comentar. Voy a comenzar con este tipo. Así que recuerda el
nombre de usuario, recuerda la contraseña. Las
mejores formas de hacerlo. En realidad no quiero. Lo que puedes hacer
es crear otro entorno y llamar a esa aplicación guión Docker Luego usa variables de eronamiento. Entonces puedes dar click
en las
variables de Eronment y podrás ejecutarlo Pero es bastante trabajo. No quiero que
parezca que tenemos una forma especificada. Entonces, dependiendo del
entorno a implementar, puedes elegir a cualquiera, ¿verdad? Entonces creo que lo que
usamos ahí fue modulif esta parte también
era modulf modulif esta parte también
era modulf, ¿verdad?
Sí. Todo bien. Así que solo ejecuta la aplicación
para arranque y solo demuestro que estos siguen funcionando
como de costumbre. Tú diriges esto. Solo esto para estar seguros, estos siguen bien.
Bien, todo conecta. Entonces esto sigue funcionando.
Esto sigue funcionando. Esta fue la parte que mencioné si vas a producción,
necesitas mudarte. Ahora que nos estamos
preparando para la producción o debería
decir producción de cotización? Les estoy enseñando
cómo hacer esto. Entonces tendré que correr una
vez más los despejados Maven. Ese es el paquete limpio de Maven, las pruebas de salto porque no
quiero que se ejecute la prueba Mientras eso corre, enseguida, yo solo así que esto está corriendo. Vamos a permitir rápidamente que
esto termine su trabajo. Bien, así que esto está
hecho. Yo cotejo esto Entonces hagamos rápidamente
una imagen Docker RM. Quiero borrar
lo que tenemos antes. Módulo Módulo. Módulelo, luego uno que ahí.
No se puede eliminar. Bien. Creo que
ya está funcionando, ¿verdad? Ya está funcionando.
Así que entremos aquí. Vamos al contenedor. El contenedor ya está así que
vamos a eliminar a este tipo. Balas Dele. ¿Qué pasó? ¿Qué
estoy haciendo aquí? Detén esto. Detén esto. Primavera mis eliminaciones.
Veamos mi contenedor. Vayamos a mis servicios. Entonces vamos a eliminar esta parada
detener este contenedor Docker. Ya no quiero que este contenedor Du
funcione, ¿verdad? Quiero despejar esta construida. ¿Qué me estoy perdiendo
aquí? A ver lo que me falta. A ver. Creado. Volvamos a ejecutar
el comando. ¿Me falta algo? Lo siento,
necesito que este tipo corra. Necesito que el Docker lo componga. Este tipo debería estar
corriendo. Vamos a aplastar esto. Esta es otra vez.
Siguen corriendo o viendo. Quiero estar seguro de que todo
sigue funcionando como de costumbre. Déjeme hacerlo abajo.
Tratando de limpiar todo. Contando ahora. Bien,
veamos ahora. Tristán. Esto ahora se
quiere aclarar. Ya terminé. Bien, así que esto se ha ido. Entonces esto ya no
está. ¿Puedo eliminar? Ya veo. Bien.
Tengo Déjame ver. Creo que tengo arriba projecton. Espero que no. Déjame ver. Espero no tener
un proyecto final. Déjame solo verificar porque
tenemos arriba projecton. Esto básicamente sería
contradictorio. Oh, guau Creo que este video
realmente se está haciendo muy largo. Déjame tratar de ejecutar las cosas
rápidamente. Bien, entonces esto ha creado. Intentemos eliminar
si tenemos alguna corrida. Bien, increíble. He
podido borrar. Tengo la imagen construida
así que vamos a
correr rápidamente creo que tengo que
hacer hasta invitado solo correr
rápidamente este brote. Ahora recuerden, ahora he colocado todo en el Yamu
para que esto funcione Eso está en la profundidad de ablación. Entonces vamos a escribir esto. Creo que tengo el
mando. Yo sólo quiero ejecutarlo. Bien. Entonces ves que se
ha conectado o está tratando de conectar JDBC, vamos a ver. Muestre esto. Es una pregunta
para ver por qué es. Esta es la experiencia de calentamiento
para la contraseña, ¿verdad? ¿En qué tipos configuraron mi contraseña? ¿Tengo la
contraseña correcta y correcta? Déjame comprobarlo. ¿Qué usé o
qué usé? Entonces tengo una variable de
entorno. Entonces ustedes pueden simplemente tal vez
saltarse este video, solo
quiero mostrarles chicos para aquellos que puedan estar
realmente interesados, no
sé exactamente
cómo hacer esto. Eso es lo que en realidad estoy
pasando por esto para explicar
para que todos puedan tener una
buena idea de cómo funciona esto. Bien. Así Mod Lif Modula Entonces esto es todo. Módulo Modulf Mamá Doctor, a ver, no
es coleccionar, ¿de qué se queja? Todo bien. Vamos a revisar. Vamos a comprobarlo. Estoy seguro de que esto nos
dará una idea si algo está
tratando de conectar. Sí, esto está tratando de
conectar. Vamos a ejecutar esto de nuevo. ¿Por qué no dirige Sr.? Veamos por qué el
señor no se está postulando. Este es un contenedor,
un contenedor Docker, RM, cojo este ID, BE BE entonces lo obligo a cerrar RM el chef. Eso cierra. Intentemos ejecutarlo de nuevo. Ahora, vamos a ejecutarlo de nuevo. No es conectar base de datos, podría
haber una
serie de razones. Sólo quiero
mostrarles cómo
funciona . Esto físicamente funciona. Ahora, para conectarse realmente
a la base de datos, hay una serie de
cosas que puedes hacer. Ahora ahora apuesta el servicio. Debería intentar conectarme al intentar
conectarme con este tipo, que es el anfitrión local. Está tratando de conectarse
al host local. El puesto local está disponible. Si compruebas si haces una
red inicia una red arranca, entonces si haces AO entonces pipe find
STR, junto a 5432 Entonces, ¿ve? Spot. Este spots
realmente funciona. Quiero
mostrarles cómo funciona. No podemos cubrir todo el contenedor
Docker aquí, pero al menos quiero
mostrarles a ustedes cómo construir una imagen de Docker sobre exactamente a
qué conectarse Y ahora esto va a estar
buscando local ahora. Esto está mal
porque va a estar tratando de
conectarse al host Local. Recuerde, Anfitrión local
dentro de un contenedor Docker. Sí, este es el tema.
Host local dentro de un contenedor Docker, no
es lo mismo Ya que no es lo mismo que el host y el sistema
locales. ¿Recuerdas cuál es el nombre ahora? Linux, la imagen es un entorno
virtual, un
entorno completamente diferente. Entonces no nos va a encontrar. Lo que puedo hacer es
fijar esto a Postgres. Si configuro esto en Postgres, entonces ejecutaré la imagen Voy a ejecutar mi docker,
esta parte aquí, yo corro a este tipo
si revisas Postgres, esto se está ejecutando como Si revisamos los contenedores en funcionamiento, esto es
contenedor funcionando. Hay un contenedor ejecutando código Pogre ¿Cuál es el nombre ahora Nombres. Todo bien. Entonces esto debería estar funcionando
como Postgres, ¿verdad? Entonces deberíamos tener un
nombre llamado Posgra. Entonces, si intentas hacer eso,
eso realmente conectaría. Si hacemos esto, esto realmente
conectaría. Vamos a hacer VN Pero paquete, ¿verdad? Esto es realmente bastante largo, hombre. Esto es realmente
bastante largo. Pero solo quería terminar
esto rápidamente en esta nota para que no
tengamos que venir aquí. Déjame quitarme esto. Hagamos esto otra vez. Hagamos esto otra vez. Ahora estoy usando
gas post, 543, dos. El gas post será ahora el
nombre del contenedor. Ahora busca el nombre
del contenedor y eso
es a lo que se conecta. Creo que eso es básicamente
lo que debemos hacer. Entonces yo solo imagen de Docker, vamos a eliminar Imagen eliminar Diciendo que un contenedor
está usando esto, voy a hacer contenedor, contenedor, RM, luego chef.
Intentemos esto otra vez. Docker Pero, volvamos a construir
esta imagen. Tratando de ser la imagen. Entonces ya hay un
archivo disponible. Quiero que
esto sea nombrado. Ahora, un archivo compuesto
suele tener algo un parámetro llamado nombre de
contenedor. Nombre del contenedor, entonces lo
llamaré Postgres. Sí. No lo sé. Creo que ahora solo soy todo que acaba de llegar a mi memoria. Entonces volvamos a ejecutar esto.
Volvamos a ejecutar esto. Entonces volvamos a ejecutar esto. Entonces
ahora que ejecutamos esto, veamos el nombre
del contenedor ahora. Yo solo quiero que sea nombre
corto Postgres. Contenedores. Veamos el nombre. Contenedores. Así que esto está
bien, ¿sabes qué? Creo que la consola en realidad me está
enfriando un poco. Estoy bastante acostumbrado a la línea de
comandos. Entonces hagámoslo. Puedo hacer Docker contenedor LS. Bien, así que estos son los contenedores
Docker. El nombre es, ya sabes,
no quiero nombrar esto porque en realidad lo está manejando de este tipo y no
quiero esto. Entonces lo que haría
es detener esto. Voy a parar. Es
un video muy largo. Así que ustedes, probablemente estoy yendo
más allá solo para
asegurarme de que para aquellos en realidad no
sé exactamente qué hacer para saber
exactamente cómo manejar esto. Eso es lo que en realidad estoy
tratando de hacer. Entonces, en lugar de correr
esto desde la primavera, voy a hacer lo que haría
es ejecutarlo directamente. Ahora hay a lo que llamas
Docker guión componer, luego D componer Entonces guión componer
lo que hace es comprobarlo, hay un archivo de composición en esta
parte y es un compuesto Sí, hay un compositor, este archivo compositor, entonces trata de
sacarlo a colación. Entonces Docker guión componer, arriba así que vamos a esto.
Ahora bien, esto es para arriba. Entonces ha traído esto a colación
de lo que esperaba conexión. Entonces si comprobamos esto es
un contenedor. Todo bien. Entonces esta ventana se agota. Vamos a otra ventana. Entonces hay un
contenedor Docker LS. ¿Ves? El nombre es SPSGres. Esto es lo
que quería sacar. Entonces el nombre es Pogresgus. Ahora que nosotros pero eso ahora, volvamos a ejecutar nuestro comando. Ejecutemos este Docker. Docker Run para simplemente
conectar de nuevo. Docker Run, entonces vamos a ejecutar esto. Deberías buscar eso y
mirar que ya no va a estar conectando con el anfitrión de Loca. Me conecté con
eso o chico para
mostrarnos exactamente si realmente fue
capaz de ver eso. Bien. Estoy seguro de que ese es
exactamente el tema, no
sé por qué no estoy
averiguando esto ahora mismo Bien, chicos, solo
quiero mostrarles que acabo de regresar en el siguiente video para
mostrarles cómo funciona Esto ya es bastante largo. De hecho lo siento mucho
esto es muy largo, pero solo quiero
explicar esto con más detalle. Gracias chicos. Adiós.
41. Corregir errores en Docker 2: Oigan, todos. Z aquí. Derecha. También quiero mostrar rápidamente un error que
realmente ocurrió, ¿verdad? No es un error básicamente. Fue un proceso en el que
construí los detalles. Todavía estaba tratando de reunir
mis pensamientos. Pensé que rápidamente
sacaría esto a colación. Entonces, cuando estás viendo
el video punto uno, estás viendo el video,
que es el siguiente video, mientras estás viendo
el siguiente video. Este aliado señala cuando
llegas al minuto 21, al minuto 21, es una
larga sesión de depuración, creo que el video terminó
cerca de unos 30 minutos En realidad terminó 8 minutos fueron realmente realmente
solo sobre la depuración Si te recomendaría probablemente
podrías saltarte esto. Entonces solo video de 21,
solo pasa a Docker dos. Pasemos al video de
Docker two,
verás exactamente
cómo en realidad FIX está usando las redes de
redacción de Docker Rápidamente quiero mencionar esto. Sin embargo, toqué
una gran cantidad de información
valiosa
que podría ser útil para ustedes más adelante
en el futuro. Así que probablemente
solo te quedes y te ordenes y veas todo
el proceso de depuración Además, quiero mencionar quiero
mencionar que en las Door Rs,
bien, hay una parte donde
realmente se nombra el nombre del oyente
en el método, de
modo que el nombre del oyente
en el método, Este nombre en el método. Así que en realidad podrías
saltarte de nuestro video 948. Si esta parte fue
básicamente donde renombramos. Al igual que el primero el video que realmente se mencionó, el video que ves justo antes del implementar pago dos, hay un video llamado
implementar Pago dos. Error de ficción que
en realidad mencionaba ahí. Aquí es de donde esto
sólo está hablando. En este Docker dos fue
donde estamos tratando probar dónde estamos pegando vía cartero y no estamos
viendo la acción
siendo no ver la acción realmente se refleja
en la realmente se refleja
en la Podrías simplemente saltarte
del video 948 al 14 32 y les muestro exactamente ahí es donde
nombramos todos esos datos Nombramos todos aquellos a los
que realmente nombramos todos los ID de escucha para
confirmar el método correcto
que ahora estás usando Eso realmente funciona
muy bien, ¿verdad? Podrías simplemente saltarte y así
no tienes que esperar. Pero sin embargo, puedes quedarte para ver todo el proceso de
depuración Simplemente sentí que podría
ser un poco aburrido, así que no quiero que ustedes
se sientan frustrados. Entonces solo decidí explicar esto
en realidad. Eso es un resumen.
No pude repasarlo otra vez. Cuando llegas al video cuando
llegas a Docker uno, cuando llegas al video 21, al minuto 21 quise decir, podrías saltar rápidamente, luego
llegar hasta Docker dos Yo arreglo el error que tenemos aquí o tú solo el proceso de
depuración Adicionalmente, si realmente
revisas el video del implemento, el pago del implemento dos, hice un video que resalta el error que realmente encontramos, y esta flecha en
realidad se vio a gran
escala que estamos tratando de probar vía Cartero, y no somos capaces de no
reflejar la base Así que rápidamente simplemente seguí
adelante para
mostrarles dónde estaba el error
en realidad arreglamos ese error, y en realidad lo arreglamos. Así que simplemente te quedas para
ver cómo sale todo. Gracias chicos. Nos
vemos en video de Nest.
42. Docker 2: Todo bien. Gracias, chicos. Así que volvemos
al caso Docker. Recuerden ahora que
en realidad tenemos recordar que este
fue el último error que tenemos, y estoy seguro que la
razón por la
que estamos teniendo este error
fue porque no se está conectando a las aplicaciones la aplicación no está
conectada a la post adivinar dentro de la
misma aplicación o dentro de la misma dentro del contenedor, ¿verdad? Ahora bien, lo que noté es, no especificó la red. Ahora, DCA en realidad tiene un concepto llamado redes donde los contenedores pueden
hablar entre sí Si el valor por defecto es
siempre si no especifica el predeterminado,
no se hablan entre sí. El predeterminado,
en realidad he habilitado esta red de módulos y he conectado para que
sea una red puente. Bridge significa que
en realidad todo debería hablar como si
estuvieran en la misma publicación. Pero aunque sea costumbre, ahora
podrán
platicar entre ellos, aunque esto no sea
un puente conductor. Pero sin embargo,
están en la misma red ahora pueden
platicar entre ellos. Aparte de usar el host
local con el que estamos teniendo problemas en el otro
momento, la misma publicación va allí. Debería estar buscando un
contenedor llamado postgres, y eso es exactamente lo que
he intentado lograr aquí Ahora he ampliado esto y ahora voy a traer
el servicio Modult Voy adelante a
escribir esto. Voy adelante para escribir
esto y esto. Voy a él
para que escriba esto
y esto luego se puede conectar. Lo que voy a hacer es
modelarlo el nombre del contenedor, colocar un nombre y el
nombre debería ser suficiente Básicamente solo uso exactamente el mismo nombre nombre debería ser suficiente Ahora, a continuación, la imagen de
las imágenes que construías. Recuerda la imagen que
construiste la imagen de Docker frígida, luego modela la la estrella de registro Se puede ver lo que
hicimos esa vez. Pero realmente es uno que es cero. Entonces ahora lo tenemos ahí. Entonces estoy exponiendo
esto en olla et ET. Expongo esto en macetas 5432. Entonces esta estoy exponiendo mascota. Entonces el resorte activo es
dev. Eso es perfecto activo. No creo que esto sea
importante porque
creo que por defecto eso
lo que la selección. Entonces quiero que
dependa del gas pus. Post gas es esto, ¿verdad? Entonces quiero que dependa de posar gas. Entonces también
lo estoy colocando en la misma red, y estoy diciendo que debería
reiniciarse en menos existencias. Entonces lo que podemos hacer
ahora es correr esto. Si ejecutamos esto como es, esto correrá primero
porque
éste depende de
éste va a esperar. Vamos a ejecutar esto. Bien,
así que vamos a comprobarlo. Como pueden ver, los chicos de Ws
está listo y funcionando. Ahora vamos a comprobar el servicio de Modult. Todo bien. Puedes ver esta conexión con éxito.
Es un éxito. El último video fue bastante largo. Tuve que mostrar rápidamente
ese feo envoltorio. Estoy volviendo para
explicar cómo funciona esto y cómo puedes hacerlo funcionar
y ahora puedes conectarte. Esto también está funcionando.
Recuerda que exponemos
nuestra atreaa Solo volvamos a ejecutar el actuador,
veamos, ¿sigue funcionando Ah, sí, funciona
porque ya está disponible. Esto ya está disponible en
80 80, prueba el otro. Oh, esto funciona. Atto. Esto también funciona. ¿Podemos probar endpoint? Oh, claro, sí, podemos probar endpoint. Ipoint
debería estar funcionando Puedo usar mi boceto,
usar mi boceto. Mi boceto como siempre.
Es mi rasguño. Entonces físicamente sólo puedo
tratar de pagar vamos a recoger esto. Sólo puedo tratar de pagar.
Creo que esto es un gobernante, ¿
verdad? Esto es un gobernante. Yo sólo trato de pagar. Entonces
para mis fans del cartero, solo
usan Postman Así que todo se verá
todo bonito y bonito. Agradable, genial. Bien, así que solo
conectaré todo. Así que sólo voy a crear nuevas publicaciones. Consigamos un nuevo post. Quiero una nueva solicitud. ¿Escojo palabra clave gráfica?
No quiero palabra clave gráfica. Et ve. Entonces quiero
una nueva solicitud, así que vamos por favor No, no quiero esto.
Dame la gráfica K. De todas formas, veamos.
Así que voy a elegir esto. Esta es la URL. IO. Entonces veamos. ¿Alguien puede decirme
por qué digo gráfico? No se supone que grafica. ¿Por qué está escogiendo el valor por defecto
como gráfico Que confíe en él. Bess realmente interesante. Solo usemos a este tipo. Publicar uno. ¿Falta
algo aquí? Quest ¿Nuevo qué? Nuevo HTTP. Bien. No sabía que
tenían eso. Coloquemos esto aquí.
Entonces necesitamos el cuerpo. Mi cuerpo Jason Jason viene aquí. Entonces coloca solo
algunas pruebas rápidas. Solo escojamos
esto. Habla esto. Sólo tírala aquí, cartero. Esto es bueno. Menos prueba.
Solo eliminemos esto. Vamos a verificar si una
validación aún entra en acción. Si entra en acción una validación, déjame mover esto para que sea cero Vamos a darle a esto. Como puedes ver, todavía entra
una validación, el polímero es
mayor que la Casmmia Debería haber dicho, a
lo mejor debería haber dicho que la cantidad
debería ser mayor que ahí, pero supongo que ustedes entienden. Esto sigue funcionando. Vamos a
reemplazar esto de nuevo como la prueba prueba seis en test.com Vamos a la Z seis. Vamos a darle a esto. Todo bien.
Podemos ver que esto funciona. Probablemente solo debería
devolver el UID. Pero de todos modos, sabemos exactamente
lo que está pasando aquí. Yo sólo voy aquí. C aquí, aquí, viniendo aquí, ven aquí
y solo revisa nuestros pedidos. Tomemos el seis. Déjame
elegir el identificador o, ¿verdad? Entonces vamos a correr al tipo O. Solo quiero asegurarme para
los que están usando Postman, que también puedan ver cómo funciona. Pasemos a este
guión y escojamos nuestro pedido. Este pedido se completa. Es que completa. Yo sólo
vengo aquí. Oder completa Entonces también un post el cuerpo un Jason. Entonces escojo a este tipo y
solo hago esto solo escojo este tipo y escojo esto y vengo
aquí, lo arrojo aquí. Entonces le pegué a esto. ¿Qué hice mal? ¿Ves? Protocolo no válido. Veamos, protocolo, HTP. Lo siento. Estoy tomando dos latas. Bien, vamos a esto. Correcto,
así completado verdadero. Vamos a la base de datos.
Asegurémonos de que las cosas funcionen. Vamos a refrescar esto.
Vamos a los pagos. Entonces los pagos solo los
pagos completados, ¿no? Los datos me recodificaron esto. Así que vamos a revisar los eventos. Los eventos en realidad
contienen esto. Entonces ves algunas cosas no
se completan aquí. Así que en realidad
tratarías de decir, en realidad
podríamos
probar a decir, vamos a completar todo esto. Simplemente llamaré al evento para que
solo presente esto es igual para ver. Se puede ver que aquí hay varios
nulos, estoy seguro, cuando ejecute
esto, todos estos nulos deberían estar fuera del camino y todo
debería estar terminado Creo que es
bueno que probemos? ¿Expuso el punto final?
No estoy seguro de que lo hiciéramos. No estoy seguro de que expongamos el punto final. Pero vamos a
echarle un vistazo. Vamos a echarle un vistazo.
Eso debería ser un evento. Evento, sí, lo exponemos. Exponer acción de igualdad,
llamarlo acción de evento. Elige al mismo mismo tipo. Creo que es un get then events. Acción del evento. Así que
vamos a echarle un vistazo. Esta es acción,
una sola acción. Creo que solo uno oh, sí. Creo que es una. Pero me interesa
la publicación de todo. Pero de cualquier manera, solo
usemos esto. Vamos a usar esto, ¿verdad?
Vamos a usar esto. A ver. Entonces esto pensamos que es
cadena, luego consíguelo. Primero que nada, confirmemos
qué acción incluso falta. Así que vamos a comprobar. Vamos a
ser capaces de descifrar Recuerda, somos capaces de saber. Entonces esta es orden terminada, orden
terminada, ¿verdad? Y el pedido completado
está utilizando qué DTO? Recuerda, ¿el DTO DTO
es qué? Entonces, ¿qué soy? DTO, Dt es pedido completo,
DTO pedido completo. Entonces, ¿cuál otro
falta? Solo completa el pedido. Pedido completo.
¿Cuál es el detalle? Recuerden, tenemos una acción en todos
y cada uno de ellos. Orden completa que debe
estar aquí, orden completa. ¿Cuál es la acción? La
acción es el pago completo. Yo sólo puedo entrar
aquí y solo hacer parámetro de
solicitud,
solicitar param ¿Cuál es la clave? Déjame
ver. Coloca la llave. La clave es la acción,
sólo a la Acción. Ahora solo presiona esto aquí, ¿verdad? Entonces, vamos a darle a esto. Sin contenido. Sí,
así fue como agregamos. Dijías que no había contenido,
¿verdad? Sin contenido. Entonces veamos si se dispara. A ver si se dispara.
A ver si se dispara. Bien. Déjame revisar los registros. ¿No imprimiste estos? Oh, no ejecutamos
esta aplicación ni qué. ¿Eso fue lo hago? Oh, no, no hay servicios. Creo que me equivoco las cosas. Estamos huyendo de Docker
estamos huyendo de Docker, así que vamos a revisar
los registros de Docker En realidad me equivoqué. Es un poco vamos a revisar los registros de Docker, revisar los servicios,
luego contenedor, vamos a ver qué está bien Entonces estos son nuestros registros. Entonces esto es, veamos, el oyente orden completo,
no encontrado, saltando en
vocación, dejando los contenidos Entonces no es encontrar al
oyente, ¿por qué es eso? Publicamos eventos concluidos. Bien, para pagos completos, y esto no se
encuentra. A ver. Entonces empujamos a este tipo
empujamos a este tipo, y vamos a
completar
pagos, pagos, veamos,
pagos , pagos,
pagos, pagos. Pagos. Entonces evento de pago, terminado, estoy
esperando a este tipo. No
se encontró oyente de escucha. No se encontró al oyente, eso sería un problema
desde donde lo empujamos ¿Tenemos una
transaccional en él? Un evento transaccional. Pago completo,
tenemos una transaccional, cual está disponible aquí Creo que ya vimos este error
antes. Vamos a empujar esto. Volvamos a entrar aquí. Oh, sí. A ver. A ver. Publicar.
Creo que creamos, ¿verdad? Publicar. Está pegando a este evento y está tratando de darle a esto. Bien. Y cuando está
tratando de hacer esto. Creo que en realidad podríamos
tener una transacción aquí. Comparemos esto.
Prueba, veamos. Ahora no encuentra una
transacción. Bien. Pensé que
en realidad lo habías descubierto. Esto va a fallar porque
hay algo 88. Vamos a correr esto en uno es ollas uno ollas. No se pudieron obtener datos, lo
sé porque hay
algo más mal. Lo sé. Local lo siento, debería ser localhost Sí. Entonces debería ser
vamos a Pot spring. No, esto no. Creo que
ClebleTpot servlets. Macetas de servidor. Se ollas, vamos a hacer un 81. Vamos a dirigir a este tipo. Bien, comenzando Bien, así que vamos a ejecutar este 881 Veamos qué
está pasando. Vamos a ejecutar esto. Todo bien. Sin contenido. Veamos dentro de esto. Entonces aquí
hay un error. Estoy recibiendo la ventana IGT run, ventana servicios ventana redonda Bien, así que estoy diciendo oyente no encontró invocación de oyente, y esa es la razón por la que
estamos teniendo ¿Bien? Todo bien. Déjame hacer una pausa esto y volver inmediatamente
veamos qué pasa. A, gracias chicos.
Ya lo descubrí. Creo que el tema
fue muy claro. Simplemente no estaba mirando. Recuerda que teníamos esto para ser el otro
detalle de pago que estaba encendido. Entonces escribimos esto
para estar también en. Fue más tarde en el curso, tuve que cambiarle el nombre a esto
para completar el futuro. Entonces
mirándolo, está buscando
pagoservicio punto encendido, Servicio de pago punto on. Y eso fue ahora que etiquetamos. Lo hemos cambiado a
servicio de pago para completar el pedido. Entonces por eso está fallando. Entonces es por eso que debes asegurarte de
que debes asegurar que el oyente porque está tomando conocimiento del oyente del
oyente,
hay una clase que tiene el oyente y el nombre del método el oyente porque está
tomando conocimiento del oyente del
oyente,
hay una clase que tiene el oyente y el nombre del método
. Entonces, ¿cuál es la
forma rápida de arreglar esto? Entonces, para arreglar esto, lo que
podemos hacer es entrar aquí, al
menos sacar esto. Lo que podemos hacer es llegar
a la publicación de eventos. Entonces revisamos el tipo de
eventos, ¿verdad? El tipo de eventos o
el escritor del oyente. Comprobamos al oyente.
Entonces cambiamos esto. Ya ves, está
buscando un pedido completo. Entonces cambiamos esto
para completar el orden. Completa. Entonces supongo que es
una buena manera de depurar porque
en realidad podríamos enfrentar esta cara mi pase en el futuro.
Yo tampoco lo sabía, ¿verdad? Venir aquí
me está dando más perspicacia también, Bien, debemos ser muy conocedores de esto
ya que tenemos problemas Bien. Bien, así que
cometamos esto. Puedo detener esto a menos que lo despida desde dentro de nuestro contenedor de muelle. Yo sll dejó esa carrera.
Todavía dejé esa carrera. Volvamos a nuestros servicios. Por lo que nuestro contenedor Docker
sigue funcionando. Entonces con este error, así que intentemos
enfocarnos de nuevo en él. Voy a cambiar esto de nuevo a 80 80. Depuré el 881, pero ahora volvemos a 80
80 a menos que llegue a esto Vamos a pegarle a este tipo. Así que vamos. Entonces esto no es
contenido. Vamos a averiguarlo. Todo bien. Usted ve, completa
o la recibida en esto. Si volvemos a esta
parte e iniciamos esta, ya ves que
en realidad todo está terminado. Todo está terminado.
Creo que esta es una buena curva de aprendizaje
para todos y fr, podemos ver que estos son errores
comunes que puedes enfrentar en caso de que
cambies el nombre. El nombre de su oyente no
debe cambiar, el método no debe cambiar Si el clúster contiene su oyente y
el método
cambia, tendría problemas De lo contrario, tienes que venir y
actualizar a estos tipos. Todo bien. Así que solo
quería mostrar esto y agradecerles chicos por quedarse
conmigo hasta este momento. Pudido probar todos los escenarios. Hay algunas pruebas
que le muestran cómo cablear el contenedor Docker, cómo probar algún contenedor
Docker, les
mostraron cómo batir redacción de Docker y
colocar
el Todos estos detalles
estarán disponibles. Entonces, ¿estás completamente
bien que esto es un pozo completo que
esto es modult Creo que sería
bueno para mí comprometer esto para que sea bueno porque
creo que queremos copiar esto. Mi guider Git
solo se quejará. Mi guider Git se quejará. Simplemente comenzaré esto para que todos puedan
usar lo que quieran Pero espero poder saltarme. Lo que puedo hacer es dejarme
agregar esto a Git guardian, agregar esto a Git agregar esto a Git. Entonces vamos a Git Commit. Llamemos a esto D dos. Llamemos a esto al menos como comprometerse
contra al menos me gusta comprometernos contra
llamemos
a esta
implementación de Docker Creo que así deberíamos llamarlo implementación
Docker.
Eso es bueno para comprometernos. Creo que
cogí el equivocado. Debería ser la correcta.
Sí, vamos a entrar aquí. Entonces el que mostré
antes, creo, y ese fue el curso que
realmente desarrollé personalmente. Entonces este es el curso que
utilizo en la enseñanza de esto, ¿verdad? Entonces, vengamos aquí.
Vayamos aquí. Vamos a llamarlo D
veamos, prueba Docker. Pruebas Docker. Sí.
Creo que deberían funcionar. Entonces, vamos a comprometernos esto
al lado para que podamos verlo. Hago cierra. Hay una manera de
saltarse guardián o hacer N. Eso es para Git guardian.
No va a quejarse. Sha Sha. Vamos a empujar Bien, así que he puesto a disposición el
compositor Docker, para que ustedes puedan probar con
él, jugar con Ahora, voy a estar mostrando uno más. Estoy pensando en mostrar
una sección más. Por esto, creo que en
realidad hemos completado todo en la
mezcla porque en
realidad voy a lanzar otro
video más adelante para ver cómo podemos hacer algunas cosas
increíbles y geniales. Así que por favor solo ten cuidado.
Si descubres más videos, simplemente amable adelante y véalo. Estoy seguro de que en realidad es mejorar tu curva de aprendizaje
para saber exactamente cómo funcionan realmente otras cosas. Oh, bueno, creo que
vamos
a poder probar esto de extremo a extremo. Tenemos
prueba de integración, probamos alambre. De hecho hicimos una demo. De hecho, tiramos alrededor
del escenario de inventario, inventario y los otros me gusta. Hablaré más en este
próximo video. Gracias.
43. Prepárate para Kubernetes: Oigan, todos. Z aquí. Todo bien. Ahora que ya terminamos de decorizar la
aplicación, Te he mostrado
tres formas diferentes en las que puedes realmente decorizar
la aplicación Nos fijamos en el camino en movimiento donde en realidad se podría ejecutar comando de movimiento que en realidad usa el
dimage trampolín le mostró ese También te mostré
cómo usar realmente el archivo Docker y te
mostré esta primera parte, también te
mostré
la segunda parte De hecho, podrías usar esto diferentes maneras ya que realmente eliges hacerlo. Uh, lo siguiente que quiero
mostrarles que es bastante
importante es que queremos hacer la
transición a coberts, ¿verdad Y como pretendemos hacer la transición
a Cubontis. Todo bien. Y a medida que hacemos la transición hacia cobertis necesitamos atender
realmente algunas cosas Y lo que lo principal
que necesitamos atender es que las propiedades que
realmente lees, ¿verdad? Esto debido a que la aplicación
es algo apátrida, realidad la
usamos de una
manera que es apátrida Por lo que todos los datos se
externalizan con base de datos o archivo de propiedades Entonces lo que pasaría es cuando
corremos en producción, ¿verdad? Y una vez que implementemos
la aplicación, necesitamos elegir las propiedades del
entorno de producción, y eso es lo que
vamos a estar viendo. El primer bit voy a estar tocando, si miras el
docople Mira a Decofle De hecho, establecí
esta propiedad aquí que en realidad establece la propiedad
para la zona horaria. Estoy en África, estoy en
Piernas y la Javanga. Yo agregaría una propiedad más aquí, agregaría una propiedad más. Sí. Y esto en realidad esto
correspondería realmente al perfil de
resorte activo. Entonces aquí estamos
configurando deliberadamente a dev, pero ahora mismo, vamos a
estar cambiando esto. Se trata de datos de desarrollo. Entonces, si queremos
cambiar a producción, necesitamos realmente valores
pasivos de producción. Entonces, como resultado,
lo que pasaría es lo que sea que estemos
pasando aquí, lo que sea que pasemos aquí como un perfil de resorte activo
desde una línea de comandos o desde unas propiedades que les voy a estar
mostrando cuando entremos en Cubonts sería exactamente lo que
va a venir Si no establecemos nada, esto no encuentra ningún valor, si no estableces ningún valor, vendrá aquí
y luego a default. Así es como funciona, ¿verdad?
De hecho, priorizo propiedades de la línea de
comandos sobre la aplicación Yam application, el valor de
las Entonces una vez que esto no se
encuentra, anula. Esto realmente va a entrar en marcha. Pero si realmente
se encuentra el perfil de resorte ,
déjame dividir esto ¿verdad? Pero si esto se encuentra, si este bit se encuentra aquí, automáticamente
lo
hará automáticamente escribiendo porque vemos que estoy escribiendo los perfiles de
primavera son propina. Bien, solo quiero
mostrarles esto, así que tenlo en cuenta
mientras realmente exploramos este bit y vemos cómo funciona
esto realmente. Bien, uh, dicho eso, ahora
volvamos a saltar. Así que en realidad he cambiado lo primero que
vamos a estar tomando conocimiento. Entonces cuando queramos
declarar esta propiedad, declarar un perfil de guión swing, voy a estar usando eso Bien, genial. Entonces, el siguiente hoyo que quiero que
veamos es esta parte. Necesitamos hacer la transición de algunos de estos datos a
entornos de producción, ¿verdad? Entonces, ¿qué haría en mi caso? Lo que haría es bastante sencillo. Entonces entraría aquí y lo
crearía bajo archivo de propiedad. Así que lo voy a hacer cuando
copie, voy a pasar. Entonces para ser exactamente lo mismo, voy a empezar a cambiar el valor. Así cha a la aplicación Docker. Entonces significa usar
DocoFleUse el archivo Daco, use Doc FiaOce que pasa en los perfiles de resorte
activos como Docker, realidad
va a estar usando estas propiedades, Queremos cambiar, probablemente
queramos leer esto también. Llamar llamémoslo un nombre de usuario. Sólo llámenlo moduli. Subrayar usemin, ¿verdad? Y el default lo voy a pasar así que siempre es bueno
tienes un default, ¿verdad? Si no encuentra esto,
es por defecto a esto, ¿verdad? En realidad se pone por defecto. No obstante, algunos patean
contra esto para decir, no, no queremos incumplir. No quiero por defecto
para realmente entrar en acción. Si falla, por defecto. Pero voy a seguir adelante
y mostrarte por defecto porque solo estoy
tratando de mostrarte las posibles todas las
formas posibles en las que podrías hacer esto para saber que
realmente puedes pasar por defecto aquí, ¿
verdad? Entonces, entremos aquí. Hagamos lo mismo
aquí o usemos una contraseña. Vamos a estar cambiando
varias cosas aquí. Venir aquí o venir
aquí o cambiar esto. Esto sería moduli
o lo llamaría host,
llamaría moduldHST luego por
aquí viniendo entonces aquí viniendo Vamos a llamarlo macetas moduli. Moduli host moduli ollas. Voy a darle a esto un default de 5432 porque chicos
nivel virtual es 5432 Entonces cambiaremos esto también. Nombre Moduli DB. Lo llamaré moduli
DB o nombre Modly Db. Bueno, lo que funcione wt. Así nombre de Modly DB. ¿Todo bien? Entonces esto es genérico. Estos cambiarían, ¿verdad? Compararía con
los otros cinco que terminaste con esto. Para los DD Lot siempre se recomienda a la hora de
entrar en producción, ¿verdad? Sería un caso en el
que ya te hayas movido ya
ejecutas el script. Si realmente usa GPA para ejecutar su script en modo de desarrollo, tiene
que elegir esos scripts
exportarlo o respaldarlo, lo que
sea, luego moverlo a la base de datos de producción y su equipo de DBA
realmente lo su equipo de DBA
realmente Eso es exactamente lo que
se supone que va a pasar, esta propiedad no está permitida. No permitido.
No se le permite administrar esta propiedad en
producción, ¿verdad? Entonces lo que vamos a hacer
es que vamos a estar ejecutando la aplicación contra la misma base de datos
usando
el modo de desarrollo, ¿verdad? Para simular realmente
las cosas, ¿verdad? Pero lo que debería pasar es esto ya no debería estar ahí
porque ya nos hemos mudado
en todas las propiedades que pretendemos, ¿verdad? Por lo que esta propiedad siempre se
recomienda que
se quite esto totalmente o lo
establezca como ninguno. Pero hay dos escuelas
de pensamientos para esto, ¿verdad? La primera escuela de
pensamiento es, quitársela. Nadie sabe siquiera una
propiedad para cambiarla aquí o dejarla aquí y
dejarla como se sabe, ¿verdad? Pero siempre recomiendo
quitársela para que nadie se vea
tentado a siquiera cambiarlo para crearlo o
actualizarlo o lo que sean los
otros que tenga, ¿verdad? Dejaré esto como se conoce solo para mostrarle que esta
propiedad existe. Después, aplaza la inicialización verdadera. Ya no estamos inicializados. Todo nuestro guión
ya está disponible. Entonces, como ves, ya no
necesito
esto, ¿verdad? Esto nunca se ejecutaría, y este script nunca debería ejecutarse también porque esto nunca
se ejecutará. Toda esta propiedad ni siquiera
debería existir. ¿Verdad? Abiti ni
siquiera debería estar disponible. Deberías tomar todo
esto o porque la aplicación
solo debe conectarse directamente. No debería echarle
un vistazo a todo esto porque las actualizaciones solo tratamos de
buscar cambios y actualizaciones, crear para eliminar la base de datos,
y traerla. Entonces no queremos todo esto. Definir inicialización, no
somos diferentes. No lo estamos inicializando
porque ya hemos ejecutado este script y la base de datos
de producción Entonces esto no es realmente necesario para que
realmente lo presentemos. Así que prácticamente podemos
eliminar esto. Lo dejaré aquí en cuanto a lo que hacemos no
todo lo que necesitamos, ¿verdad? Digo que estas
cosas están disponibles. Están disponibles. Al igual
que tenemos espejo a nuestro dev. Vamos a dividir esto.
Tenemos espejo a esta parte. Así que solo quiero
mostrarles que voy a dejar esto, pero ya se lo he dicho
para que ustedes puedan comparar la diferencia. Pero recuerden que lo mencioné, esto no debería
ir a producción. Esto no está bien
ir a producción. Esto por alguna razón rara, algunos tal vez solo
quieran hacer un pequeño cambio. Y olvida que
se supone que ni siquiera debes usar esto y usar update y llevar algunas cosas extra
que se supone que no debes. ¿Por qué no el guión que
necesario ha sido incorrecto? La manera ideal escoge el script
de tu entorno de prueba, ejecuta el script en tu base de datos de
producción, pero la creación de las tablas y cuáles y qué tienes. Haz eso. Después conecta
la aplicación a la misma. Eso es exactamente
lo que se supone que es. Esa es la forma en que asegura que tu solicitud siga siendo
apátrida, ¿verdad? Son los datos que está
disponible la base de datos que utiliza no hay datos
en la base de datos, no
hay nada que usar, y así es
exactamente como deberíamos ser. Todo bien. Entonces también venimos aquí. Estas partes,
realmente no exploramos esto, y yo siempre
diría que lo pusieran a caer. Lo que básicamente hace este tipo es, digamos que tenemos
eventos incompletos que vimos. Si configuramos esto a che, lo que sucedería es automáticamente una vez
que se inicien
las aplicaciones, se intente disparar
todos los eventos. No creo que sea
el enfoque correcto. Deberíamos tener que tomar el control
de esto. Pero, ¿quién sabe? Entonces la compañía podría decidir
también ambiente podría decidir que quieres hacer este detonante en
cada neurona, ¿verdad Pero si quieres
decir esto como cierto, recuerda lo que discutimos en incompleto así que estamos
tratando de publicar el evento. Te dije que deberías usar un planificador y les
mostré chicos cómo usar el planificador para activar
realmente el evento Entonces mencioné que si estás teniendo
más de una instancia, necesitas empezar a pensar en usar
una empiezas a
pensar en
usar lo que es Shed Lock, usar Mopy Shedocks implementación muy
común, solo
puedes buscar
en Internet, solo
puedes buscar
en Internet, usar Shedok entonces eso
realmente pasaría si
tienes dos instancias, cualquiera que sea la que obtenga la clave de la base de datos antes que nada, sea la que obtenga la clave de la base de datos antes lo bloquea que hace un
cambio y el otro
no es capaz de interactuar realmente
con esa aplicación. Esto solo es una visión general,
pero esta parte siempre
debe permanecer también. No voy a tocar esto. Sí, hacemos uso de
esto a pesar que me lo quité en la
aplicación, pero si revisas, si comprobamos dónde publicamos realmente dónde
publicamos realmente nuestro evento aquí,
comenté esto. Aquí es donde lo estamos
usando, ¿verdad? Yo lo comenté.
Esto es Joy usándolo. Entonces utilizo el ambiente
u obtengo propiedad. Yo realmente podría usar
esto, que mencioné donde queremos eliminar aplicaciones
más antiguas, ¿verdad? Sólo quería
mostrarles esto otra vez. Queremos eliminar propiedades
más antiguas. Lo siento publicaciones más antiguas, me refiero a propiedades, publicaciones
más antiguas, después de que nos enviaron y
los pupilos entonces podemos establecer me detengo en esto
bastante, ¿verdad? Y estoy seguro que ustedes solo
pueden regresar y vemos los videos
para ver cómo funciona. Y esto es una parte de lo
programado, que mencioné. Pero esto muestra la par
de la cerradura del cobertizo. Podemos simplemente el modo de desarrollo
solo tener una instancia. Pero si ustedes chicos si
ustedes piensan que es menos y tengo un par de personas que realmente no
sé cómo usar cobertizo Lock. Nosotros solo comentamos, comentamos solo deja los comentarios o simplemente en realidad
lo planteamos como una pregunta. Si puedo ver cerca
de un buen número de personas
que mencionaron que no saben cómo usar la cerradura del cobertizo, seguiré adelante y
en realidad implementaré eso. Voy a esperar eso, ¿verdad? Sólo quiero mostrar
por qué se utiliza este camino. Pronto podría decir, pero
esto debería ser encontrado. Oh, sí, hay dos maneras. Estoy usando el ambiente
para traerlo. Otros podrían haber usado a su valor. Podría usar en el
valor qué resorte realmente proporciona el
marco de sprit realmente proporciona Bueno, yo solo prefiero
usar el ambiente. Sólo me gusta ser consistente. En algunos de mis proyectos,
utilizo a todo el valor. Entonces utilizo un ambiente. La clave es que puedes
hacer varias cosas en una primavera puedes hacer lo mismo
en primavera de varias maneras. Esa es la palabra. Pero
sin embargo, sea consistente. Eso es lo que pasa con
la pantalla, sé consistente. Entonces cualquiera aquí dentro del proyecto sabe que
eres consistente, yo simplemente caería en usar
exactamente lo que has usado. Solo si tienes problemas de
rendimiento, o probablemente hay
que pensar cambiar y van a cambiar, tienes que
cambiar por todas partes. Todo bien. Creo que
eso se explica. Entonces, vengamos aquí.
Voy a hacer lo mismo que
en realidad colocaría esto aquí. Voy a llamar a esto eventos llamar a
los eventos subrayado. Llamémoslo eliminar
eventos duración. Por lo tanto, elimine, subraye
eventos, subraye la duración. Bien. Entonces sí, entonces te doy el valor por defecto de 5,000
que inicialmente lo usamos. Bien, entonces esta parte, ¿
verdad? Lo usamos de todo. Sí. Acabo de lanzar para
la gerencia, esta es la parte para
en el Actuador donde queríamos ver todo lo que
el Actuador tenía para ofrecer. Pero esto no es
recomendable en la producción. No quieres hacer esto
en producción, ¿verdad? Lo que probablemente quieras hacer en producción es
exponer lo que necesitas. Solo necesitas
exponer lo que necesitas. No se expone todo. Entonces como resultado, lo que
voy a hacer es esto. Entonces vamos a tener
así que pensemos en ello. Bien, entonces vamos a
tener así que voy a llamar a esto, llamémoslo actor, actuador,
extremos expuestos, ¿verdad Puntos finales expuestos. Todo bien. Entonces sí, entonces probablemente
querríamos irnos con
default como salud. Sólo voy a liberar la salud sola. Entonces, la salud debería ser lo
único que realmente está disponible por defecto si en realidad
no la pasamos Pero mientras hacemos esto,
voy a tratar de ver si podemos liberar salud
y módulos, ¿verdad? Muy bien, entonces Saba pot. ¿W se está ejecutando este Saba? Bien. Entonces esto es que a la gente le
encanta usar ATAT Esto no importaría
cuando realmente corres en Kubernetes porque esto
sería Kubernetes, tienes una unidad donde
ejecutas cosas en una vaina y
la olla en la que corres no
significa realmente que eso es lo que tienes
en todo tu sistema, aunque yo explicaría Solo quiero explicarte
esto para que ustedes
tengan puedan dejarlo como el TT
Esto no afecta nada, cuando volvamos, entonces podemos decidir el bote en el que
debes correr. Lo que
haría es volver aquí, haré ollas de servidor. Entonces en realidad te pondría
por defecto a 80 81. Así es exactamente como
deberíamos vernos. Si ves que hemos externalizado todas las propiedades
que hay que cambiar Entonces escoge esto y
mientras trabajamos en la sección de Cbonti después haber pasado por
el comando básico, trata de explicar las otras cosas y estamos trabajando en esta Entonces entonces les
mostraré chicos dónde enchufarían todas
estas propiedades. Gracias chicos por darme. Los veré chicos
en el siguiente video.
44. Prueba de propiedades externalizadas: Todo bien. Gracias,
chicos. por volver con M Z aquí. Bien, ya que
en realidad has hecho el poco de externalizar
todas las propiedades, debería ser simplemente
ideal para
reconstruir realmente la imagen
porque si no
lo haces, no debería llevar
estos detalles adicionales Recuerda que esto es
archivos nuevos o agregarlos. Tenemos
que asegurarnos de que en realidad es empujado al registro Docker Hagámoslo. Voy a
hacer VN BN limpio. Puede empaquetar paquete limpio, luego D, omitir pruebas. Thi lo hará pero la aplicación. Es muy probable que falle. Creo que esto va a fallar. Porque la prueba
probablemente podría requerir excepto
saltarse esas partes, porque
nos saltamos esta parte. Si no te saltaste la prueba,
esto básicamente fallará porque esta redacción de Docker no
se ejecutará y
tendrá problemas, ¿verdad Bien. ¿Así que se está haciendo eso? Veamos esto. Bien,
entonces tenemos esto. Todo bien. Entonces el siguiente bit es así
ahora que tenemos esto, necesitamos construir, voy a
construir la imagen y voy a empujar al
registro, ¿verdad? Entonces para hacer eso, déjame estar seguro. Estoy tratando de ver
algo. Yo estaba esperando. Asegurémonos de que todo funcionó
como de costumbre. Yo hice una limpieza. Necesito construir. Yo no
quería la prueba. Bien. Bien, se ve bien. Ahora, vamos a ver.
Limpiemos esto, esto, esto. Objetivo compilar, Pero la imagen. Bien. Todo bien. Esto es bueno. Claire. A menos que construyamos T, entonces usamos el
mismo nombre de servicio. Pero uno o cero en
las partes actuales, entonces eso básicamente apuntaría a este
archivo Docker,
y este dockerfile a
su vez apuntaría a este archivo Porque recuerda,
usamos un tarro de puntos, usamos un tarro estrella
en realidad coincide con esto. Hagamos esto. Veamos esto. Hagamos esto. Empujemos esto esto en realidad debería entrar. Oh, sí. Entonces eso es extractivo, todos los procesos funcionando Entonces esto está completo
con éxito, ¿verdad? Este éxito. Así que
vamos a revisar nuestra imagen. Hacemos una imagen Docker. Déjame sacar esto a
colación porque está muy por debajo. Entonces, vamos a sacarlo a colación.
Voy a hacer una imagen de Docker Recuerda, puedes hacer
esto en cualquier terminal. Yo solo prefiero ya
que estoy usando lo mismo. Ya que Intelligen tiene terminal, solo
estoy usando directamente, así que no tenemos a donde me estoy moviendo a diferentes pantallas Bien, entonces imagen menos. Entonces esto es Modult
increíble. Entonces esto es genial. Una forma más nítida de hacerlo voy a hacer una imagen menos entonces voy a hacer modular puedo
hacer MOD luego estrella Sí, así que eso coincidirá cualquier cosa que comience
con esto, ¿verdad? Entonces puedes ver que esto
es genial, ¿verdad? Esto es genial. Tenemos
la imagen disponible. Recuerdo que es la misma imagen que
realmente usamos dentro de nuestro archivo de
redacción, ¿verdad? Esto es que estoy coincidiendo con el
nombre ya colocado ahí, que es cero distal. Ahora bien, con esto en su lugar para ejecutar la aplicación
tal como está, ¿no? Esto
fallaría automáticamente, ¿verdad? Esto fallaría automáticamente porque recuerde que la aplicación estará usando esta guía para ejecutarse
realmente,
para ejecutarse por sí misma. Quiero explicar
un poco de diferencia porque esto puede sonar confuso para algunas personas. Recuerde que este archivo de redacción se generó cuando usamos nuestra dependencia de componer
Docker,
iving dependencia . Entonces
esto se generó. Ahora, deliberadamente agregamos esto cuando intentamos
probar los bits de Docker, ¿verdad Entonces esto
no es absolutamente necesario. Estás cuando solo intentas
ejecutar la aplicación, pasamos la
etapa de ejecución de la aplicación
solo desde el IDE. Hemos probado Docker y estamos tratando de mudarnos
directamente a los cubanits Ahora hemos agregado algunos detalles
extra aquí, que es este tipo. Veamos si estas
propiedades si
agregamos estas propiedades
directamente, ¿funcionaría esto? ¿Funcionaría esto en Docker? Si funciona en Docker, entonces no deberíamos tener
ningún problema en coberti Entonces, ¿cómo lo probamos? Lo primero que voy a
hacer, simplemente ejecutaré este servicio tal como está. Yo no
haría nada. Recuerda, te expliqué
todos estos bits en el video en el
video que realmente
miramos . Yo le expliqué
todos estos bits. Creo que la única diferencia
ahora es si comprobamos esto, vamos a comparar comprobamos esto,
vamos a ver las propiedades de la
aplicación, estoy usando 80 81 aquí. Estoy usando 80 81 aquí. Todo bien. No hay nada
malo en usarlo. Simplemente puedes apegarte a
usar 80 81, ¿verdad? Yo sólo quiero ser consistente. Volvamos aquí. Simplemente podemos exponer todo
808-18-0801 Yo podría decir exponer T 81
objetivo 80 81 al objetivo 80 80. El contenedor
estará funcionando en 88. Si bien lo que se
expondrá a la línea de comandos al
host será 881, ¿verdad Así es como funciona Docker. Esa es la configuración. Este no es el 881.
Permítanme ser consistente. Así que solo al 80 81 o a la verdad coinciden con lo que realmente tenemos aquí. Ahora, vamos a ejecutar esto tal como está. No hemos agregado estas propiedades
adicionales. Ahora, queremos decir que
este perfil sea docker. Recuerda, aquí hemos creado
otro perfil, Docker, que sea Docker Sería esto al parecer
espero que falle. No ha sido eso, ahora estás esperando todas estas propiedades
que no están disponibles, y eso es exactamente
lo que debería suceder. Ejecutemos esto y
veamos cómo playout con check verificamos los registros para
ver exactamente qué está sucediendo Todo bien. Entonces esto se está
ejecutando, y vamos a ver. Así que recuerda, le dijimos
a post guess sería el primero en correr porque esto depende de post. Recuerda, esto
depende de post guess, que es post guess service. Entonces ahora que esto se inicia, vamos a revisar el costo de los módulos. Entonces vamos a ver. Muelle modular, espero ver veo Perfil de resorte. Ya veo. Se espera perfil primaveral. ¿Pueden ustedes recordar
dónde está el perfil de primavera? El perfil de resorte es lo que
usamos en nuestro archivo Docker. Mira esto. Archivo Docker Por lo que está tratando de pasar el perfil de resorte a los perfiles de
resorte activos. Ya ves, las cosas
empiezan a romperse, lo cual es algo bueno. Entonces, lo que haría,
detengamos esto primero. Detengamos esto. Detener. Y déjeme matarlo. Todo bien. Entonces volveré
a mi archivo de redacción. Ahora lo estás haciendo
funcionar, ¿verdad? Estás tratando de que
funcione. Ahora, no estamos usando perfiles de resorte
activos directamente ahora. Estoy usando
perfiles de resorte aquí, ¿verdad? Estoy diciendo que use esta
propiedad perfil de resorte y páselo al
perfil de resorte está activo aquí. Yo solo lo estaba usando directamente,
así que esto no va a funcionar. El madurar
sería, yo iría a decir perfil de subrayado primaveral Eso coincidiría con esto
y pasaré en Docker. Ahora, quítate esto o
simplemente comienza. Entonces,
volvamos a ejecutar esto. Entonces iremos paso a paso para que ustedes vean
cómo funciona, y ahora
se están pasando
las propiedades para que todo tenga
sentido, ¿verdad? Entonces no tenemos que saltarnos. No quiero apresurar esto para
que podamos entender
paso a paso, porque si te pierdes una
sola configuración, descubres que la
aplicación no está funcionando, podría estar bastante frustrada. Bien, así que volvamos a
ejecutar esto. Justo en esto otra vez.
Voy a ir a estas partes. Recuerda, no tienes que usar esto si eres
ruidoso inteligente, ve a las partes donde
tienes tu componer yo solo hago Docker componer y eso
funcionaría automáticamente Estoy tratando de evitar cambiar demasiadas pantallas para que
no vayamos de una
pantalla a otra. Voy a ser bastante confuso. Pero sólo podrías venir aquí. Acabamos de llegar a
cualquier línea de comandos, vamos a las partes donde
realmente tienes este proyecto. Tienes este archivo de
redacción Docker. Lo que haría es
simplemente copiar mi parte aquí, copio el camino absoluto, vengo y solo veo el
voy a tenerlo como si hiciera Ls. Puedes configurar mi componer
yo podría hacer componer. Así es exactamente como
sacarlo a colación, compone Docker. Presione Docker componer solo
presione Enter. Ignora esto. Ignorar esto es solo
auto completo, ignora esto y eso
realmente sacará esto a colación. Volveré a la terminal
inteligente para tenerla cableada así continuamos con
lo que estamos haciendo. Bien, entonces déjame
ejecutarlo desde la línea de comandos para que tenga sentido cómo lo
vas a hacer. Ya que estoy usando lo mismo,
estoy usando un tiempo aquí, así que voy a hacer aquí hago LS. Para que veas,
aquí
tengo mi archivo de redacción , así que solo
sacaré esto. Ver D componer. Todo bien. Entonces hagámoslo. Para que puedas ver los
sábados, los sábados. Todo bien. Entonces vamos a
ver ¿cuál es el problema? Entonces esto puedo ver esto sigue refiriéndose al perfil de resorte. Entonces, lo que significa que aún no está cableado. Esto no es cableado.
Así que vamos a depurar. Vamos a depurar.
Veamos qué está pasando. Vamos a depurar. Entonces
volveré a mi terminal. Entonces si no lo ejecutas en
dash Dm seguirá corriendo. Así que volveré aquí
y solo la bajaré. Der componer abajo. Estoy parando todo y esto debería parar automáticamente. Genial. Todo bien. Volvamos aquí
hay D perfil de resorte. A ver. Tenemos resorte
bajo perfil Scope. Nosotros usamos. Muelle
bajo perfil de alcance. Aquí lo estoy configurando a Docker, ¿qué me estoy perdiendo? Perfil de resorte activo. Espero que este tipo entre como un ambiente
disponible aquí. Tenemos este
perfil primaveral, veamos. A ver. Esto lo conseguimos. Las cosas es simplemente
leerlo directamente. Bien. Todo bien. Yo estaría necesitando una ENV aquí. Voy a necesitar un ENV EMV, así que tenemos que cablear
el archivo Docker,
el archivo ENV
diciendo así que quiero que sea
una variable de entorno Déjame entender eso. Todo bien. Gracias.
Gracias por acompañarme. Yo hice un cambio y el cambio que hice es que veas
el archivo P de resorte. Lo estaba usando directamente. Entonces usándolo directamente
de esta manera. ¿Correcto? Yo usando dilin de esta manera Y el efecto de hacer esto es que lo
ves como una cuerda. Necesito interpolarlo. Se llama
interpolación de cadenas. Necesito colocarlo
entre calibres. Sí. Esto sería entonces
capaz de leerlo. Entonces dijimos esto como Docker,
podrás leerlo. Eso es lo que quería hacer. Esto requerirá que
hagamos para volver a correr. Recuerda, estamos haciendo
este cambio usando este archivo Docker y el archivo
docker se usa para construir nuestra imagen y los aspectos de
imagen y
los aspectos de imagen que
tenemos todo, el jab pero Vamos a seguir adelante y ejecutar
esto de nuevo, hacer un movimiento. Paquete limpio D Saltar
pruebas. Todo bien. Entonces esto debería completarse casi de inmediato
porque no lleva tiempo. Bien, así que vamos a hacer
con eso. Lo siguiente es que necesitamos
ver rápidamente la imagen. Vamos solo pero esta imagen. Así que construyendo la imagen. Recuerden que antes mencioné todo
este comando. Entonces esto está construido.
Confirmemos nuestra imagen. Como mencioné
allí Docker imagen menos que Modu la SA Tenemos esto construido. Bien. Bueno. Esto lo tenemos hecho.
Esto no es exacto. Todo está casado para lograr. Ahora, vamos a ejecutar esto. Hagamos un Docker Compose up y
veamos qué pasa Docker componer componer. Antes de que realmente golpeemos esto, recuerda esto, estamos tratando de sacar a
relucir a este tipo
en particular de aquí. Estamos tratando de ejecutar
esto para ver lo que pasamos perfil de
giro aquí para ser
Docker. ¿Ahora cambia? ¿Tenemos el
entorno cambiar
el cambio de perfil a Docker, lo que desencadenará
este
camino en particular y esperamos que caiga requiriendo que pongamos en
todos estos detalles, verdad Todos estos detalles. Si
no pasamos estos detalles, debería usar el valor predeterminado.
Eso es lo que estamos diciendo. No se
encuentran los detalles, usa el valor predeterminado. Si encontramos esto como Modulit encuentra nuestro módulo ¿qué pasa con esto?
Recuerda que no pusimos esto. No pusimos esta
en particular. ¿Correcto? Entonces esto
debería fallar por el nombre
de la base de datos DB que no
proporcionamos, ¿verdad? Porque no pasamos un default así
como pasamos un
default a esto, ¿verdad? Me gusta dejar uno para
que vea exactamente cómo se siente así que
muestra exactamente lo que pasó. Bien, así que vamos a darle a esto.
Entonces, ¿esto se está ejecutando? El Docker compone,
el gas del poste está arriba. Ahora la aplicación se está ejecutando. Verás, esto está fallando.
Esto está fallando. Veamos el fracaso.
Vamos a subir un poco. ¿Por qué está fallando?
Ya ves, increíble. Un perfil ahora es Docker.
Esto es la lectura. Ahora, ¿por qué está fallando? No es
una excepción de puntero porque ¿por qué? Es comparar, si lo miras quejándose de la base de datos, se está quejando de
que está
tratando de conectarse a JDBC, y al parecer no puede conectarse porque
buscando un puntero no, hay no lo pasamos
en realidad está esperando una cadena como
valor de la base de datos, entonces, pero estamos
pasando un nulo porque no pasamos nada Así que eso coincide con nuestra solicitud. Entonces pasemos eso rápidamente a menos que
si las cosas funcionan. Así que entraré rápidamente aquí
y haré Docker Compose abajo rápidamente derribar
todo. Y eso detendría
esto de inmediato. Bueno. Entonces eso detiene
esto de inmediato. Sí. Bien, así que
vamos a aclararlo. Entonces, así que eso realmente
aclara esto. Bien, entonces eso significa
dicho y hecho. Recuerda que pasamos
por defecto aquí. Yo solo te mostré
que este default para nosotros pasando default aquí, automáticamente, si no
ve esto, recoge todo esto. Entonces vamos a hacer, en
lugar de pasar los valores por defecto, hagamos la propiedad,
voy a hacer la lata adecuada estableciendo todos estos valores
que adquirimos Entonces terminamos con el docofle. Ahora estamos en la redacción. Ahora bien, ¿cuáles son los valores que nos fijamos? Entonces establecemos este modulif. Ven aquí, modulf
y establece esto, ¿verdad? Este es el módulo I pasando como
una cadena, son cadenas. Entonces contraseña también módulo. Paquete también estado de ánimo solo copia
este lugar esto aquí. Entonces los anfitriones el anfitrión. Esa es la base de datos. Recuerden, les
mencioné esto antes que una vez
que estén con el contenedor Docker, con el contenedor Docker, nosotros con debug para un proceso
muy largo Tenemos que usar el nombre del servicio, porque pertenecen a la
misma red. Yo explico esto. Si estás confundido,
por favor mira amablemente a Doris parte uno y DP dos Explico esto en detalle
cómo se supone que deben
ser para conectarse al nombre
del servicio. El anfitrión. Consulta el anfitrión con el que
te estás conectando. Se supone que es servicio
PoscastPCAS. Eso es a lo que nos estamos conectando. Entonces la olla la olla ya
es de alambre. Adelante y aún así etiquetarlo. Esto es lo mismo trayendo
el anfitrión Entonces 5432. Después el nombre DB. Nombre DB. Yo elijo el nombre DB. No lo
conecté antes. Pongo nombre DB de aquí. Esa es la base de datos. Así que permítanme ser consistente pasar
todo como una cadena. Entonces como una cadena.
Creo que un número, ¿verdad? Pero creo que vas a
picar. Lo revisaremos. Veremos si
realmente lo acepta. Bien, ¿qué más? Entonces este
evento retrasa la duración. Así que, deliberadamente, puedo
establecer esto en 4.000, ¿verdad? Sólo para cambiar un poco
las cosas. Entonces este actuador. Ahora, veamos el actuador
que está expuesto. Recuerda, es solo salud. Entonces, ¿y si quiero
exponer la salud? Comer modulf. Recuerda, deberíamos
poder ver la salud y el módulo
que expone usando esto. Todo bien. Entonces el servidor, qué estamos ejecutando en 80 81. Añadamos también el bote aquí
para correr en 80 81. Todo bien. Hemos hecho bastante trabajo. Un poco de trabajo. Bien, con esto hecho, vamos a ejecutar
la redacción de Docker. Veamos, y
arreglemos cualquier error si hay Docker componga,
Compost line up, compost up. Les he enseñado
cómo funciona esto. Entonces, en lugar de escribir
el comando cada vez, solo
usaré los atajos
inteligentes. Así que en realidad hábitos bo. Yo haré esto. Todo bien. Entonces esto está arriba, mira
el post está arriba. Veamos qué pasa aquí. Todo bien. ¿Pueden
ver que sucede algo
increíble?
¿Puedes ver esto? Impresionante. Para que pueda ver el
Docker. Este es el perfil. Se puede ver la base de datos completada, se conectaron correctamente, y no hay errores arrojados. Entonces la manera de probar
esto es que solo
exponemos la salud
y el módulo de la misma. Así que vamos a confirmar
eso. Recuerden, ¿ estamos exponiendo qué en 80 81 ahora? Esto va en
80 81, como ve, 80 81, pero estoy exponiendo
en 80 81 también. Tan confuso. ¿Esto es 80 81 o es para el anfitrión o
esto para el contenedor? Entonces, permítanme derribar esto rápidamente
. Voy a bajar esto, luego
expondré el 80 80. Solo se puede acceder en 80 80, pero el contenedor
se ejecutará en 80 81. Quiero obtener la
diferencia. Por eso estoy tratando de
pasar por este proceso. Vamos a subir y ejecutar
estos servicios. Bien. Entonces puedes ver esto
está arriba la base de datos está arriba. Veamos esto. Bien, la conexión se conectó con éxito,
y ¿qué podemos ver? ¿Empecé en qué? 80 81. Pero recuerden, estaremos
accediendo a la web 80 80. Intentemos evaluar sobre.
Intentemos evaluar en 80 81. Intentemos evaluar el 80
81. Vamos a lo que pasa. Entonces Anfitrión local 80 81, ¿verdad? 80 81, luego haz Atria o
no puede encontrar nada. No hay nada llamado árboleto. No hay nada de
eso hay un 81. No hay nada malo en el 881, porque estamos corriendo en
ATT, volvamos a ATT. Todo bien. ¿Pueden ver
esto, chicos? Pude exponer la salud,
exponer mod lef? Esto realmente funciona
tal como pretendíamos. Esto es simplemente increíble.
Chicos. Esto es increíble. Esto es realmente, realmente increíble. De hecho, somos capaces de hacer esto. Ahora bien, así es como ejecuto mi prueba y deliberadamente muestro esta parte para que
sepamos cómo funciona. Lo hice para que
ustedes entiendan que si están tratando hacer la transición de su aplicación
para que se ejecute en Kubernetes, necesitan poder
hacer que funcione Si solo estás apuntando directamente a Kubernetes
y por alguna razón, no
tienes Kubernetes
en tu entorno local, tienes varios errores Lo que tienen que hacer es que les he
enseñado a ustedes cómo
conectar a estos tipos. Utilizando Docker componer, puedes conectar la base de datos
y también el servicio Hablé sobre cómo conectar
la red juntos. No sé si mencioné
esto, pero si no lo hice, el momento en que configuraste
tu red así, y esta automáticamente crea el volumen y la
red para ti, ¿verdad? Porque si no lo hiciera,
tendría que hacer un comando urónico que crea el volumen Docker, te
voy a dar el nombre que crea Docker Network Pero hacer esto dentro
del archivo de componer Docker componer
crea automáticamente la red y el volumen ¿verdad Y les
enseñé a cablear esto y lo mostré paso a paso. Entonces, por favor, ¿puedes ver los otros videos o los videos
anteriores en Docker Rice para ver
cómo realmente traje todo esto y
pude hacer esto? Lo extra que estoy haciendo en
este video es mostrarles a
ustedes cómo conectar
todos estos detalles. Te mostré sin esta propiedad de
ambiente, voy a señalar a Docker Yo falla, y somos
capaces de ver por qué en realidad
señalamos
pudimos ver cómo funciona esto. Y para demostrárnoslo, me quité cambié
el bote 881 a ATAT Entonces el contenedor está en 80 81, y esto está en ATAT, así que
realmente somos capaces de
conectarlos y que
podamos aprobar Otra forma de confirmar qué olla
se está ejecutando tu servicio? Esto es para usuarios de Windows. Para otros usuarios también
puedes hacer lo mismo. Esto se hace por vamos a
abrir una terminal. Vamos a abrir terminal. Net inicia AO, luego encuentra STR. Esto es estrictamente para Windows, luego pasas en las macetas 80 81. Ahora, no hay nada
malo en el 881. Por eso esto
no está mostrando nada. Pero paso en 88, ¿ves? Muestra los detalles que Tight. También tienes Net en Linux, que también se traduce a
Mac esta vez en lugar de usar 881 usando find
SEI usando grab En lugar de usar ANO, no
sé si tienen
todas estas propiedades. Simplemente podrían aprovechar a cada uno de ellos solo una luz de
investigación y encontrarla. Entonces usa grab para encontrar cualquier Podlson 80 81 y para
mostrarte los detalles Dot quiero
mostrarles todo esto, soy capaz de completar
la sesión de doc. Lo sentimos, es necesario completar la sesión de
externalización de la solicitud en preparación para
que nos mudemos a Cubert Solo me tomé mi tiempo para
explicar cómo también podemos ejecutar las cosas en Doka usando un
componerse Docer y como pueden ver, ambas aplicaciones se están ejecutando, que es el post
guess y el módulo Dirijo dos servicios juntos para mostrar cómo se conectarían
realmente. Creo que este es un hito
bastante bueno. Yo nos ahorraría el estrés. Yo solo registraría esto
en verifico un problema. ¿Cómo debo llamar a este tema? ¿Cómo debería llamarlo?
Diré probando la externización Entonces creo que así es como probablemente
lo
llamaré probando la
externalización de Docker Pero debido a que estás usando
lanzando ubertis solo
diría testing, deployment,
externalization Creo que esas palabras
no son realmente precisas. Déjame
pensarlo un poco. Creo que se me
ocurrió un buen nombre. Y la razón por la que estoy tratando de ser muy específico con
el nombre para que cuando solo quieras ver los commits exactos y
las cosas que cambié, sepas exactamente lo que hice. Y eso es lo que estoy
tratando de ser
por eso estoy tratando de
ser muy específico. Yo lo llamaré voy
a traer a este tipo. Lo llamaré una prueba, propiedades
externalizadas. Entonces esto funciona. Bien,
así que voy a elegir esto. Ahora entra dentro de mi expediente. Voy a hacer un Docker, chequear un Git. CommitneM pasa en I cierra. Entonces sí. Bien, entonces todos los cambios realizados, puedes escoger de esto
en realidad. Entonces se pone empuje. A menos que vea venir esto, derecho S esta viniendo. Bien, así que esto está
cerca. Bien, chicos Te veré en el siguiente video. Ahora que hemos hecho
esto, básicamente, creo que es hora de que
luego saltemos a Cubertspper Los veo en el siguiente video.
45. Conclusión de Modulith: Aquí, todos, aquí. Es genial
tenerte aquí. Si eres capaz de llegar
a este punto, enhorabuena.
Eres supersto Has podido reunir tanto
conocimiento, has podido
detallar cosas como explorar mea componer, conocerte cuándo y
cuándo no usarlo Definiciones de identidad, realmente
puedes
usar la multitud sobre JPA, sabiendo exactamente la
diferencia entre ellos. Ahora ya conoces las
funcionalidades centrales del módulo,
cómo abstraer cosas en diferentes módulos o paquetes
como algunos lo llamarían, luego saber cuándo exponer
y cuándo no exponer. Eso es realmente un montón de conocimiento
que has reunido ahí. También sabes cosas
como módulos abiertos y sabes cuándo estás ejecutando
tu prueba de integración sabes exactamente cuándo traer
realmente un nuevo módulo para
hablar realmente con un módulo diferente. Sólo ponle el tuyo a los chicos. Tampoco quiero olvidar
que también tienes un evento masivo, y escuchar eso es
bastante impresionante. Ahora ya sabes
cómo comunicarte de
una manera desacoplada,
lo cual es maravilloso Y ahora ya sabes cómo
documentarlo tu moduli, lo cual es bastante impresionante, chicos, bastante, bastante impresionante Y estoy muy, muy, muy emocionada por ti. Bien. No obstante, esta es
solo la primera entrega. Siempre
te prometo un fin a otro. Entonces esta es la
primera entrega. Hay que mirar
cosas como pipeline, pipeline CICD, que
vendrán en la siguiente clase Entonces siguiendo eso
, vamos a estar viendo uberts en detalle Tanta cosa divertida por venir chicos. Espero verte en la segunda entrega
de este curso, todo lo que necesitas hacer ir a la sección de
descripción una vez que vayas a la
sección de descripción o a la sección A, y verás el enlace
a las otras clases, en las
que puedes simplemente saltar y
comenzar a participar de inmediato Bien, chicos, vean en
el siguiente video.