Comment activer h2-console dans spring-webmvc sans spring-boot?

Oct 22 2020

Mon application se construit avec spring-webmvcet spring-jdbcsans spring-boot. Dans mon application.propertiesj'ai:

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

datasource.dbname=users
datasource.script=classpath:resources/users.sql

Mais ça ne démarre pas h2-consoleparce que je n'en ai pas spring-boot-devtools, mais en ai-je besoin? J'ai donc ajouté le bean Server à partir d'un org.h2.toolspackage comme celui-ci:

// The web server is a simple standalone HTTP server that
// implements the H2 Console application.  localhost:8082
@Bean(initMethod = "start", destroyMethod = "stop")
public Server h2Server() throws SQLException {
    return Server.createWebServer();
}

Et maintenant, je peux accéder à la console Web localhost:8082et jdbc:h2:mem:usersme connecter à , mais je pense que ce n'est pas une solution, mais une solution de contournement, car j'ai ajouté le DataSourcebean en utilisant ce qui EmbeddedDatabaseBuildersuit:

@Bean
public DataSource dataSource(
        @Value("${datasource.dbname}") String dbname, @Value("${datasource.script}") String script) {

    return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .setName(dbname)
            .addScript(script)
            .build();
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
    return new JdbcTemplate(dataSource);
}

Yat - il un moyen de ressort pour permettre h2-consoleau spring-webmvcsans spring-boot? Ou est-ce la manière normale de l'activer?

pom.xml :

<!-- spring -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<!-- h2 database -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

<!-- servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>

Réponses

1 gtiwari333 Oct 22 2020 at 18:24

Il semble que vous deviez enregistrer un org.h2.server.web.WebServletdans votre mappage de servlet.

D'après les commentaires sur WebServlet:

Ce servlet permet d'utiliser la console H2 dans un conteneur de servlet standard tel que Tomcat ou Jetty.

Voir également:

  • org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration
  • org.h2.server.web.WebServlet