Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

di il
19 risposte

Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?
Adesso sto leggendo il capitolo 5:
https://github.com/Apress/beg-spring-boot-2/tree/master/chapter-05
ma mancano le viste e i controller. Come potrebbe funzionare una webapp di questo tipo?
Scusate l'espressione ma è un testo fatto con il 'posteriore'!
Devo concludere lo script ogni volta?
Se è così c'è da in fronte! Sono solo al 5° capitolo su 19.
In springboot-jdbc-demo ho aggiunto:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<title>Home</title>
</head>
<body>
	<!-- La variabile "app.title" è fornita da messages.properties. -->
	<h2>App Title</h2>
	<table>
		<thead>
			<tr>
				<th>Id</th>
				<th>Name</th>
			</tr>
		</thead>
		<tbody>
			<tr th:each="user : ${users}">
				<td th:text="${user.id}">Id</td>
				<td th:text="${user.name}">Name</td>
			</tr>
		</tbody>
	</table>
</body>
</html>

@Controller
public class HomeController
{
	@Autowired UserRepository userRepo;
	@RequestMapping("/")
	public String home(Model model)
	{
		model.addAttribute("users", userRepo.findAll());
		return "index";
	}
}
Ho aggiunto spring-boot-starter-web al pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
						http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.apress</groupId>
	<artifactId>springboot-jdbc-demo</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.BUILD-SNAPSHOT</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
	</properties>

	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
		<pluginRepository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<dependencies>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.apache.tomcat</groupId>
					<artifactId>tomcat-jdbc</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

	</dependencies>

</project>
ma ottengo questo:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Tue Jul 28 22:45:04 CEST 2020
There was an unexpected error (type=Not Found, status=404).
No message available

"C:\Program Files (x86)\Java\jre1.8.0_261\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar=50574:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jre1.8.0_261\lib\charsets.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\deploy.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\javaws.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jce.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jfr.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jfxswt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jsse.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\management-agent.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\plugin.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\resources.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\rt.jar;C:\DATI\IntelliJ\05-springboot-jdbc-demo\target\classes;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-jdbc-2.0.0.BUILD-20180301.043858-634.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-2.0.0.BUILD-20180301.043915-633.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot\2.0.0.BUILD-SNAPSHOT\spring-boot-2.0.0.BUILD-20180301.043920-633.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.0.BUILD-SNAPSHOT\spring-boot-autoconfigure-2.0.0.BUILD-20180301.043806-635.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-logging-2.0.0.BUILD-20180301.043903-634.jar;C:\Users\DELL\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\DELL\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\DELL\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\DELL\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\DELL\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\DELL\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\DELL\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-jdbc\5.0.4.RELEASE\spring-jdbc-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-beans\5.0.4.RELEASE\spring-beans-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-tx\5.0.4.RELEASE\spring-tx-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\com\zaxxer\HikariCP\2.7.8\HikariCP-2.7.8.jar;C:\Users\DELL\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\DELL\.m2\repository\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar;C:\Users\DELL\.m2\repository\com\h2database\h2\1.4.196\h2-1.4.196.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-core\5.0.4.RELEASE\spring-core-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-jcl\5.0.4.RELEASE\spring-jcl-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-web-2.0.0.BUILD-20180301.043912-634.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-json-2.0.0.BUILD-20180301.043900-634.jar;C:\Users\DELL\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.4\jackson-databind-2.9.4.jar;C:\Users\DELL\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\DELL\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.4\jackson-core-2.9.4.jar;C:\Users\DELL\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.4\jackson-datatype-jdk8-2.9.4.jar;C:\Users\DELL\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.4\jackson-datatype-jsr310-2.9.4.jar;C:\Users\DELL\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.4\jackson-module-parameter-names-2.9.4.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-tomcat-2.0.0.BUILD-20180301.043909-634.jar;C:\Users\DELL\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.28\tomcat-embed-core-8.5.28.jar;C:\Users\DELL\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.28\tomcat-embed-el-8.5.28.jar;C:\Users\DELL\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.28\tomcat-embed-websocket-8.5.28.jar;C:\Users\DELL\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.7.Final\hibernate-validator-6.0.7.Final.jar;C:\Users\DELL\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\DELL\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\DELL\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-web\5.0.4.RELEASE\spring-web-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-webmvc\5.0.4.RELEASE\spring-webmvc-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-aop\5.0.4.RELEASE\spring-aop-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-context\5.0.4.RELEASE\spring-context-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-expression\5.0.4.RELEASE\spring-expression-5.0.4.RELEASE.jar" com.apress.demo.SpringbootJdbcDemoApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.0.BUILD-SNAPSHOT)

2020-07-28 23:45:18.277  INFO 15848 --- [           main] c.a.demo.SpringbootJdbcDemoApplication   : Starting SpringbootJdbcDemoApplication on DESKTOP-N74IH9B with PID 15848 (C:\DATI\IntelliJ\05-springboot-jdbc-demo\target\classes started by DELL in C:\DATI\IntelliJ\05-springboot-jdbc-demo)
2020-07-28 23:45:18.280  INFO 15848 --- [           main] c.a.demo.SpringbootJdbcDemoApplication   : No active profile set, falling back to default profiles: default
2020-07-28 23:45:18.334  INFO 15848 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@14a4e18: startup date [Tue Jul 28 23:45:18 CEST 2020]; root of context hierarchy
2020-07-28 23:45:19.521  INFO 15848 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-07-28 23:45:19.543  INFO 15848 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-07-28 23:45:19.543  INFO 15848 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.28
2020-07-28 23:45:19.547  INFO 15848 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files (x86)\Java\jre1.8.0_261\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\DELL\AppData\Local\Microsoft\WindowsApps;;.]
2020-07-28 23:45:19.634  INFO 15848 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-07-28 23:45:19.634  INFO 15848 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1304 ms
2020-07-28 23:45:19.728  INFO 15848 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2020-07-28 23:45:19.731  INFO 15848 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2020-07-28 23:45:19.732  INFO 15848 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2020-07-28 23:45:19.732  INFO 15848 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2020-07-28 23:45:19.732  INFO 15848 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2020-07-28 23:45:19.810  INFO 15848 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-07-28 23:45:19.881  INFO 15848 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-07-28 23:45:19.893  INFO 15848 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from URL [file:/C:/DATI/IntelliJ/05-springboot-jdbc-demo/target/classes/schema.sql]
2020-07-28 23:45:19.901  INFO 15848 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executed SQL script from URL [file:/C:/DATI/IntelliJ/05-springboot-jdbc-demo/target/classes/schema.sql] in 8 ms.
2020-07-28 23:45:19.902  INFO 15848 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from URL [file:/C:/DATI/IntelliJ/05-springboot-jdbc-demo/target/classes/data.sql]
2020-07-28 23:45:19.905  INFO 15848 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executed SQL script from URL [file:/C:/DATI/IntelliJ/05-springboot-jdbc-demo/target/classes/data.sql] in 3 ms.
2020-07-28 23:45:20.221  INFO 15848 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@14a4e18: startup date [Tue Jul 28 23:45:18 CEST 2020]; root of context hierarchy
2020-07-28 23:45:20.265  INFO 15848 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String com.apress.demo.HomeController.home(org.springframework.ui.Model)
2020-07-28 23:45:20.270  INFO 15848 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2020-07-28 23:45:20.270  INFO 15848 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2020-07-28 23:45:20.302  INFO 15848 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2020-07-28 23:45:20.302  INFO 15848 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2020-07-28 23:45:20.335  INFO 15848 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2020-07-28 23:45:20.480  INFO 15848 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2020-07-28 23:45:20.481  INFO 15848 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'dataSource' has been autodetected for JMX exposure
2020-07-28 23:45:20.485  INFO 15848 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
2020-07-28 23:45:20.511  INFO 15848 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-07-28 23:45:20.513  INFO 15848 --- [           main] c.a.demo.SpringbootJdbcDemoApplication   : Started SpringbootJdbcDemoApplication in 2.65 seconds (JVM running for 3.847)
2020-07-28 23:45:21.028  INFO 15848 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2020-07-28 23:45:21.028  INFO 15848 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2020-07-28 23:45:21.056  INFO 15848 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 28 ms
1) Dimentico qualcosa?
2) Le viste in resources ed i controller nella stessa cartella in cui c'è la classe con il main(), giusto?

19 Risposte

  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    giannino1995 ha scritto:


    Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?
    Adesso sto leggendo il capitolo 5:
    https://github.com/Apress/beg-spring-boot-2/tree/master/chapter-05
    ma mancano le viste e i controller. Come potrebbe funzionare una webapp di questo tipo?
    Allora: in quel chapter-05 ci sono 3 progetti. Il primo spring-jdbc-demo NON è una applicazione Spring Boot ma solo con Spring Framework puro (lo vedi dal pom.xml !). Gli altri due sono fatti con Spring Boot.

    Ma la vera questione è che quei progetti NON fanno (per scelta dell'autore) qualcosa di reale in termini di pagine web o servizi. Ciò che si vuole dimostrare viene fatto solo con gli "occhi" di uno unit-test. Infatti per "provare" qualcosa va lanciato lo unit-test nel progetto.

    Perché? Per un motivo anche molto semplice: tutta la parte legata alle web application, a Spring MVC, ecc... appare solo nel capitolo 10 !!!
    Quindi prima ovviamente non ti può far vedere qualcosa della parte web! Sarebbe perlomeno controproducente/fuorviante.

    Ora, stai già criticando il libro dicendo che è "fatto con il 'posteriore'" e finora credo che hai acquisito molto poco di Spring Boot (e temo che hai ancora molte lacune su IoC/DI), poi pretendi di vedere "qualcosa" lato web quando non hai ancora raggiunto neanche 1/3 del libro .....

    Nel capitolo 5, l'argomento principale è il JdbcTemplate di Spring (che è una cosa di Spring Framework base!). Pertanto: ti è ben chiaro cosa è, a cosa serve e come si usa il JdbcTemplate??
    Come al solito:
    "sì" -----> passa pure al capitolo successivo
    "no" -----> rileggi perlomeno il capitolo 5
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    Capisco, come si lancia lo unit-test del progetto su IntelliJ IDEA?
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    giannino1995 ha scritto:


    Capisco, come si lancia lo unit-test del progetto su IntelliJ IDEA?
    L'avevo già detto brevemente qui: https://www.iprogrammatori.it/forum-programmazione/post8656742.html#p8656742
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    Non avevo letto quel messaggio prima di ora, non capisco perché. Facendo i test Spring Boot scrive anche sul DBMS?
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    giannino1995 ha scritto:


    Non avevo letto quel messaggio prima di ora, non capisco perché. Facendo i test Spring Boot scrive anche sul DBMS?
    Sì, scrive anche, uno degli unit-test è sul userRepository.create(). Ma lo fa sul H2 in memory (che ha senso per uno unit-test).
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    Ora che ho scoperto questa funzione degli IDE ritorno ad apprezzare il testo.
    In application.properties trovo logging.level.org.springframework che imposta la tipologia di logging nella Console di IntelliJ durante l'avvio dell'applicazione. Da internet leggo che esistono le seguenti opzioni:
    ERROR
    WARN
    INFO
    DEBUG
    TRACE

    ma cambiando opzione in application.properties non noto differenze. Se scrivo logging.level.org.springframework=ERROR non vedo comparire solo log di tipo ERROR e non vedo neppure la console stracolma di RECORD.
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    giannino1995 ha scritto:


    In application.properties trovo logging.level.org.springframework che imposta la tipologia di logging nella Console di IntelliJ durante l'avvio dell'applicazione. Da internet leggo che esistono le seguenti opzioni:
    ERROR
    WARN
    INFO
    DEBUG
    TRACE
    Esiste anche FATAL che è "sopra" ERROR. I livelli di errore, perlomeno questi che sono quelli "tradizionali" (a parte altre librerie di logging più particolari), sono organizzati in una "scala" che ordina i livelli nel seguente modo:

    TRACE < DEBUG < INFO < WARN < ERROR < FATAL

    TRACE è il meno grave, FATAL è il più grave. Se si imposta es. WARN su un logger, allora su quello solamente i livelli WARN e "maggiori" verranno loggati, gli altri meno gravi verranno ignorati.

    E comunque se noti logging.level.org.springframework, quindi il logger si chiama "org.springframework" per cui tutti i logger in package più "sotto" ereditano (se non diversamente impostato) quel livello.

    Ciò che fa ad esempio com.zaxxer.hikari non c'entra con quel logger.
    Temo che non ha neanche valide conoscenze sulle librerie di logging ....
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    Sul testo leggo:
    If you already have an existing database with tables, you can take the dump of the existing database
    structure and make it the baseline script so that you can clean the database and start from scratch. If you
    don't want to take a dump and re-run the initial script (which is common in production environments), you
    can set flyway.baseline-on-migrate=true, which will insert a baseline record in the schema_version table
    with the version set to 1. Now you can add migration scripts with version numbers higher than 1—say 1.1,
    1_2, etc.
    in application-prod.properties trovo:
    flyway.baseline-on-migrate=true
    che IntelliJ IDEA mi segna come errato e mi consiglia di editare in questo modo:
    spring.flyway.baseline-on-migrate=true
    Cambiando true con false non noto differenze lanciando l'applicazione oppure non comprendo nel dettaglio la frase in inglese oppure ancora è troppo tardi e devo andare a dormire... beh comincio ad andare a dormire...
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    Innanzitutto ti è chiaro cosa è e a cosa serve Flyway?

    giannino1995 ha scritto:


    che IntelliJ IDEA mi segna come errato e mi consiglia di editare in questo modo:
    spring.flyway.baseline-on-migrate=true
    Uhm, sì in questo caso l'IDE ha ragione. Le property flyway.xxxxx si usavano con Spring Boot 1.x mentre con Spring Boot 2.x si deve usare spring.flyway.xxxxx

    P.S. questa è sicuramente stata una "svista" dell'autore, dato che ha usato una versione "giovanissima" di SB 2.x (2.0.0.BUILD-SNAPSHOT) e magari in quel momento non era ancora chiarissimo il cambiamento di naming di quelle property.
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    Oggi non ho avuto tempo a cimentarmi sul Spring ma desidero rispondere alla tua domanda.
    Flyway se ho capito bene è un software che permette di fare tante cose tra le quali spostare i dati da un database ad un altro. La cosa interessante è che il database di partenza e di arrivo possono anche essere diversi. Posso spostare schema e dati da un DBMS MySQL in un altro come PostgreSQL o viceversa, ecc... Nel progetto ho due file:
    V1_1__init.sql
    CREATE TABLE users (
      id int(11) NOT NULL AUTO_INCREMENT,
      name varchar(100) NOT NULL,
      email varchar(100) DEFAULT NULL,
      PRIMARY KEY (id)
    );
    insert into users(id, name, email) values(1,'John','john@gmail.com');
    insert into users(id, name, email) values(2,'Rod','rod@gmail.com');
    insert into users(id, name, email) values(3,'Renold','renold@gmail.com');
    
    V1_2__Add_Col_Dob
    
    ALTER TABLE USERS ADD COLUMN DOB DATE DEFAULT NULL;
    
    Il primo dovrebbe simulare il dump di un database mentre il secondo una modifica allo schema del DBMS originario. Avviando i test il Plugin sposta schema e dati da MySQL ad H2.
    Detto ciò non capisco spring.flyway.baseline-on-migrate cosa faccia, che differenza c'è nel assegnare 1 ad uno schema oppure no? Boh... ho le idee molto confuse...
    Qual è la differenza tra "dump" e "initial script"?
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    giannino1995 ha scritto:


    Flyway se ho capito bene è un software che permette di fare tante cose tra le quali spostare i dati da un database ad un altro. La cosa interessante è che il database di partenza e di arrivo possono anche essere diversi. Posso spostare schema e dati da un DBMS MySQL in un altro come PostgreSQL o viceversa, ecc...
    No affatto. Flyway non "sposta" o "trasferisce" un bel nulla tra i db.

    Flyway serve per un'altra cosa: per gestire il "versionamento" del database. Per applicare ad un db delle modifiche in maniera "incrementale" in base ad una strategia di versionamento scelta.

    giannino1995 ha scritto:


    Avviando i test il Plugin sposta schema e dati da MySQL ad H2.
    Ripeto che Flyway non "sposta" nulla tra due db !

    giannino1995 ha scritto:


    ho le idee molto confuse...
    Stiamo notando .....
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    Allora non ho capito nulla.
    Non so cosa significa applicare modifiche in maniera incrementale.
    V1_2__Add_Col_Dob è una query che potrei inviare al DBMS senza Flyway.
    Voglio testare il seguente codice?
    ALTER TABLE USERS ADD COLUMN DOB DATE DEFAULT NULL;
    Faccio un dump del DBMS, carico tutto in locale, lancio la query scritta sopra, testo la nuova webapp e se tutto va bene eseguo la query anche sul server reale prima di sostituire il file .war. Ovviamente faccio sempre un backup di tutto per scongiurare ogni problema. Non vedo utilità alcuna in questo Flyway.
    Soprattutto non capisco a cosa serve questo spring.flyway.baseline-on-migrate.
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    giannino1995 ha scritto:


    V1_2__Add_Col_Dob è una query che potrei inviare al DBMS senza Flyway.
    Certo che "tecnicamente" lo si potrebbe fare a mano ma NON è quello il punto.

    giannino1995 ha scritto:


    Faccio un dump del DBMS, carico tutto in locale, lancio la query scritta sopra, testo la nuova webapp e se tutto va bene eseguo la query anche sul server reale prima di sostituire il file .war.
    Questa è la tua visione molto semplificata di uno scenario molto banale/basilare in cui tutto è abbastanza ristretto e sotto il tuo controllo e quindi sostanzialmente fai "come ti pare".

    Ma gli strumenti come Flyway (ne esistono anche altri) servono specialmente in grossi progetti/grandi aziende dove una applicazione tipicamente "vive" in svariati ambienti differenti, ad esempio "dev", "test", "qa", "alfa", "preprod", "prod" a seconda delle scelte fatte.
    E queste modifiche "incrementali" al database N-O-N le si fanno mai "a mano" .... vengono fatte AUTOMATICAMENTE. Se hai notato, Flyway si crea una tabella a suo uso in cui tiene traccia di tutte le versioni flaggando quelle che ha già applicato. In ciascuno dei vari ambienti ci potrebbe essere una "versione" differente in un certo momento. Questi strumenti gestiscono da soli questi script e li applicano in maniera opportuna quando/come possibile tenendo traccia di tutto.

    Se uno script aggiunge dei dati a delle tabelle di "descrizione", tu vai a mano su ciascun ambiente a vedere se sono già stati applicati?? Oltre alla perdita di tempo è pure "pericoloso", perché l'essere umano .... beh, sbaglia, si distrae ecc... E se non guardi attentamente magari erano già stati aggiunti (da un'altra persona) e li aggiungi una seconda volta? Avrai dei duplicati .... E se non te ne accorgi subito???
    E se tu sviluppatore non avessi neanche accesso a tutti gli ambienti? (io ad esempio nei lavori fatti non avevo MAI accesso all'ambiente/db di "produzione")

    In contesti abbastanza grandi non puoi dire: "faccio un dump del db test e lo metto su preprod (o peggio il contrario)" oppure "faccio una insert a mano sul db di produzione". Se fai questi ragionamenti in queste aziende/contesti di un certo livello ..... ti "sparano"!!!! (a meno che sei un consulente esterno e ti buttano fuori subito ..)

    giannino1995 ha scritto:


    Non vedo utilità alcuna in questo Flyway.
    Onestamente: lascia perdere Flyway. NON è importante ai fini dello studio di Spring Boot e probabilmente non ti capiterà mai di usarlo in contesti davvero più "reali".
  • Re: Perché sul mio libro mancano delle classi e dei file dal capitolo 3 in avanti?

    andbin ha scritto:


    Onestamente: lascia perdere Flyway. NON è importante ai fini dello studio di Spring Boot e probabilmente non ti capiterà mai di usarlo in contesti davvero più "reali".
    Si infatti, su questo sono d'accordo ma vorrei solo capire spring.flyway.baseline-on-migrate a cosa serve nel mio script.
    Da quello che scrivi mi sembra di capire che Flyway non sia solo una dipendenza ma un vero e proprio software per la gestione di DBMS usato nei vari ambienti e che V1_1__init.sql e V1_2__Add_Col_Dob.sql siano file prodotti dal software Flyway in modo automatico:
    https://flywaydb.org/documentation/commandline/#download-and-installation
    In pratica Flyway permette di individuare automaticamente le modifiche allo schema del DBMS suddividendo il database in file (prima lo schema e poi i dati in ciascun file .sql) in modo da capire in maniera agevole la 'storia' del DB. spring.flyway.baseline-on-migrate=true sembrerebbe una specifica per produrre questi file .sql non per usarli.
    Se hai già un database esistente con tabelle, puoi prendere il dump della struttura del database esistente e renderlo lo script di base in modo da poter pulire il database e ricominciare da zero. Se non si desidera eseguire un dump e rieseguire lo script iniziale (che è comune negli ambienti di produzione), è possibile impostare flyway.baseline-on-migrate = true, che inserirà un record di base nella tabella schema_version con la versione impostata su 1. Ora è possibile aggiungere script di migrazione con numeri di versione superiori a 1, ad esempio 1.1, 1_2, ecc.
    Rileggendo la traduzione non vedo nulla di interessante per il progetto su Spring Boot. L'applicazione non si connette a nessun DBMS, prende gli sql in 'IntelliJ\05-springboot-flyway-demo\src\main\resources\db\migration' e li carica sulla versione MySQL del mio PC.
    Quando spring.flyway.baseline-on-migrate = true forse la dipendenza di Spring carica i due file .sql su MySQL fondendo i due schemi. Facendo export su MySQL non noto differenze. Forse spring.flyway.baseline-on-migrate = true ha senso usarlo se si ha installato sul proprio PC Flyway. Tu che dici?
Devi accedere o registrarti per scrivere nel forum
19 risposte