Se non si può fare lascio stare. A tuo avviso sarebbe possibile scrivere in
index.html il nome del database in uso con
@Conditional?
Io farei così con le prime due classi ma poi come scrivo in index.html?
/**
*
*/
package apress.hellospringboot;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Conditional;
/**
* @author Siva
*
*/
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Conditional(DatabaseTypeCondition.class)
public @interface DatabaseType
{
String value();
}
/**
*
*/
package apress.hellospringboot;
import java.util.Map;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
* @author Siva
*
*/
public class DatabaseTypeCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata metadata) {
Map<String, Object> attributes = metadata.getAnnotationAttributes(DatabaseType.class.getName());
String type = (String) attributes.get("value");
return (type != null && type.equalsIgnoreCase("MySQL"));
}
}
In buona sostanza comprendo l'inizio dell'annotazione ma non la file. Saresti in grado di spiegarmi?
Vorrei scrivere qualcosa in index.html, qualche uso concreto e pratico di @Conditional.
AppConfig.java non saprei come scriverla.
Questa classe IntelliJ me la segna sbagliata:
package apress.hellospringboot;
import org.springframework.context.annotation.*;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Configuration
@ComponentScan
public class AppConfig {
@DatabaseType("MYSQL")
@RequestMapping("/")
public String ScriviMySQL(Model model) {
model.addAttribute("dbType", "MySQL");
return "index.html";
}
@Bean
@DatabaseType("H2")
@RequestMapping("/")
public String ScriviH2(Model model) {
model.addAttribute("dbType", "H2");
return "index.html";
}
}
Questo approccio non funziona:
package apress.hellospringboot;
import apress.hellospringboot.domain.Database;
import org.springframework.context.annotation.*;
import org.springframework.ui.Model;
@Configuration
@ComponentScan
public class AppConfig {
@Conditional(DatabaseTypeCondition.class)
public void ScriviMySQL(Model model) {
model.addAttribute("db", (new Database("MySQL")).getDatabase());
}
}
<!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. -->
<h1 th:text="#{app.title}">Titolo</h1>
<h2 th:text="#{app.descrizione}">Descrizione</h2>
<h3 th:text="#{app.sottotitolo}">Sottotitolo</h3>
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<!-- 'users' viene fornita da HomeController.java. -->
<tr th:each="user : ${users}">
<!-- 'user' è il nome della tabella, 'id' il nome del campo della tabella 'user'. -->
<td th:text="${user.id}">Id</td>
<!-- 'user' è il nome della tabella, 'name' il nome del campo della tabella 'user'. -->
<td th:text="${user.name}">Name</td>
</tr>
</tbody>
</table>
<p th:text="db">Tipo di database</p>
</body>
</html>
package apress.hellospringboot.domain;
public class Database {
private String database;
public Database() {
}
public Database(String database) {
this.database = database;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
}
Sono nuovamente fermo...