2018年5月29日火曜日

PostgreSQL : データベース一覧を確認する方法

PostgresSQL 10.4 で、データベース一覧を確認する方法。

クエリ
select * from pg_database

結果
  datname  | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace |               datacl
-----------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+------------+---------------+-------------------------------------
 postgres  |     10 |        6 | C          | C        | f             | t            |           -1 |         12937 |        549 |          1 |          1663 |
 mrs       |  16393 |        6 | C          | C        | f             | t            |           -1 |         12937 |        549 |          1 |          1663 |
 template1 |     10 |        6 | C          | C        | t             | t            |           -1 |         12937 |        549 |          1 |          1663 | {=c/postgres,postgres=CTc/postgres}
 template0 |     10 |        6 | C          | C        | t             | f            |           -1 |         12937 |        549 |          1 |          1663 | {=c/postgres,postgres=CTc/postgres}

2018年5月28日月曜日

Spring : templatesを階層化する

templatesを階層化する方法。何を言っているかというと、下記のような構成(赤枠の部分)のときにURLとhtmlをマッピングさせる方法を説明していく。


先日作った Spring Security を試すために作ったアプリのコードが作成済みなことを前提としているので、見ておいてもらったほうが何を書いているのか理解しやすいと思う。

src/main/resources/templates/home/home.html

<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title>Home</title>

    </head>

    <body>

        <h1>HOME</h1>

        <label><a th:href="@{/greeting}">クリック</a>してください</label>

    </body>

</html>

MvcConfig.java(書き換え)

package springsecurityexample;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("greeting");
        registry.addViewController("/greeting").setViewName("greeting");
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/home").setViewName("home/home");
    }
}


registry.addViewController("/home").setViewName("home/home")

この部分が追加したソース。setViewNameのところを見てほしい。home/homeといった感じでスラッシュを入れて階層構造を表現していく。

http://localhost:8080/home にアクセスしてログインすると、home画面が表示されることが分かる。

2018年5月27日日曜日

Spring : Spring Securityでログイン画面を作る

概要


Spring Security を使ってログイン画面の実装を行う。画面構成は以下のようなものとする。


LOGIN

ログイン画面。ユーザーとパスワードを入力して、ログインを行う。ログインを行うとGreeting画面へ遷移する。

Greeting

Greeting画面。Hello <ユーザー名>を画面に表示する。ログアウトすることでLOGIN画面に戻る。


手順


ファイル > 新規 > その他


Spring スターター・プロジェクトを選択して次へ


名前、グループ、成果物、パッケージを書き換える。何でもいいが、ここではspringsecurityexampleとした。


ThymeleafとWebにチェックを入れて完了。


Spring Boot アプリケーションの骨格が出来上がる。今回は以下のような構成のアプリケーションを作成する。


Spring Securityを利用するにはpom.xmlに以下のコードを追加する。

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


pom.xmlに追加したらプロジェクト右クリック > 実行 > Maven installを実行する。


MvcConfig.java

package springsecurityexample;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("greeting");
        registry.addViewController("/greeting").setViewName("greeting");
        registry.addViewController("/login").setViewName("login");
    }
}

このクラスはURLとhtmlのマッピングを定義している。"/"は"greeting.html"、"/login"は"login.html"にマッピングされる。


WebSecurityConfig.java

package springsecurityexample;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @Bean
    @Override
    public UserDetailsService userDetailsService() {
        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        UserDetails user = User.withUsername("user")
                            .passwordEncoder(encoder::encode)
                            .password("password")
                            .roles("USER")
                            .build();
        return new InMemoryUserDetailsManager(user);
    }
}

WebSecurityConfigEnableWebSecurity

このアノテーションを指定することでSpring Securityがサポートされたクラスになる。

configure(HttpSecurity)

このメソッドでセキュアなURLとそうでないURLを指定する。今回はセキュアなURLはなし。formLoginに記載のところが、ログイン画面。

userDetailsService()


ユーザー情報を記録する。


src/main/resources/templates/login.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>ログイン</title>
    </head>
    <body>
        <div th:if="${param.error}">
            ユーザー名またはパスワードに誤りがあります
        </div>
        <div th:if="${param.logout}">
            ログアウトしました
        </div>
        <form th:action="@{/login}" method=post>
            <div><label> ユーザー名:<input type="text" name="username"/></label></div>
            <div><label> パスワード:<input type="password" name="password"/></label></div>
            <div><input type="submit" value="ログイン"/></div>
        </form>
    </body>
</html>

param.error

ユーザー名やパスワードに誤りがあったときに表示される情報を指定する。

param.logout


ログアウトしてログイン画面に遷移してきたときに表示される情報を指定する。


src/main/resources/templates/greeting.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>挨拶</title>
    </head>
    <body>
        <h1 th:inline="text">Hello [[${#httpServletRequest.remoteUser}]]!</h1>
        <form th:action="@{/logout}" method=post>
            <input type="submit" value="ログアウト"/>
        </form>
    </body>
</html>

httpServletRequest.remoteUser


ユーザー情報のユーザー名を取得する。


localhost:8080/loginにアクセスすると、ログイン画面が表示される。


ユーザー名(user)とパスワード(password)を入力してログインをクリック。


Greeting画面が表示される。


一度ログアウトして、今度はURLを指定して直接Greeting画面に飛ぼうとしてみる。
localhost:8080/greeting


Greeting画面ではなく、ログイン画面が表示される。

2018年5月20日日曜日

Spring Boot : 簡単なWebアプリケーションの作成

先日作成した Hello World を表示するアプリケーションでは、Webアプリケーションとしての拡張性や柔軟性がない。Java で作成した Controll クラスから固定の文字列を返却することしか出来ないからだ。

今回は html で作成したテンプレートに Java で作成した Controll クラスから値を渡すようなものを作成する。

ファイル > 新規 > その他


ウィザードから「Spring スターター・プロジェクト」を選択


名前、グループ、成果物、パッケージを「greeting」に書き換える。


テンプレート・エンジンに Thymeleaf を選択し、Webに Web を選択する。ここまで終わったら「完了」をクリック。


パッケージ・エクスプローラーを確認すると、Spring Boot アプリケーションの骨格が出来上がっている。


まずは Controller クラスの作成。

package greeting;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class GreetingController {
    @RequestMapping("/greeting")
    public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }
}

@Controller
Controller クラスであることを示すアノテーション。

@RequestMapping
ここでは /greeting に greeting メソッドをマッピングしている。

@RequestParam
リクエストパラメータの設定を行うアノテーション。パラメータとして name を指定。required を false としているので、name パラメータは省略できる。省略した場合の値は defaultValue に設定してある World となる。

次にテンプレートとなる html を作成する。src/main/resources > templates 配下に greeting.html を作成する。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>挨拶</title>
</head>
<body>
    <p th:text="'Hello ' + ${name} + '!'" />
</body>
</html>

プロジェクトを右クリック、実行 > Spring Boot アプリケーション をクリックでアプリケーションを実行する。

http://localhost:8080/greeting にアクセスすると作成したWebアプリケーションが表示される。


name パラメータを指定してみる。
http://localhost:8080/greeting?name=Hitoshi


2018年5月19日土曜日

Spring : Unit Test

SpringにおけるUnit Testの方法。

先日作成したSpring Boot アプリケーションのUnit Testコードを書いて、実行してみようと思う。

Unit Testクラスは src/test/java 配下にパッケージを作成して、配置していくことになる。



こんかいは hello パッケージ配下に HelloController クラスのテストクラスである HelloControllerTestを作成していく。

package hello;
import static org.hamcrest.Matchers.*;
import static  org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import  org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
     @Autowired
     private MockMvc mvc;
     @Test
     public void getHello() throws Exception {
          mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
               .andExpect(status().isOk())
               .andExpect(content().string(equalTo("Hello  World")));
     }
}


@SpringBootTest と @AutoConfigureMockMvc アノテーションをクラスに付加することで、@Autowired アノテーションが付加された MockMvc へインジェクションされるようになる。

あとは、JUnitを実行するだけで、テストの実行を行える。


Spring Boot アプリケーションの終了方法

Spring Boot アプリケーションをEclipse上でストップさせるには、まずデバッグビューを確認する。



起動したアプリケーションが存在するはずなので右クリック。



表示されたメニューの中から「終了」を選ぶと、Spring Boot アプリケーションが終了する。デバッグモードでの起動でなくてもデバッグビューに表示されるし、ちゃんと終了する。

本当は、もうちょっと賢いやり方があるのかもしれないが、取りあえず終了したから良しとしよう。

2018年5月18日金曜日

Spring Boot : Hello World

概要


ここではSpring Bootで簡単なWebアプリ、Hello Worldを実装していく。

Environment

  • Eclipse 4.7
  • Spring Tools 3.9.4.RELEASE

もし、"Spring Tools 3.9.4.RELEASE"をインストールしていないようなら、Eclipse マーケットプレイスからインストールすること。


ステップ


Eclipseを使えば、簡単にSpring Boot アプリケーションの作成を行える。

"File > New > Others"を選択。 ウィザードが表示されるので、"Spring Boot > Spring Starter Project"を選択し、"Next"をクリック.



次の項目を書き換える。Name、Group、Artifact、Pakage。ここでは、すべて"hello"を設定した。書き換え終わったら"Next"をクリック。



ThymeleafとWebにチェックを入れ、Finishをクリック. しばらく待っていると、Eclipseが自動的にSpring Boot アプリケーションの骨組みを作成してくれる。



Package Explorerを確認すると、以下のようになっている。



"src/main/java > hello"を右クリック。Newを選択し、Classをクリック。ウィザードが表示されたら、Nameに"HelloController"と入力。入力を終えたらFinishをクリック



HelloController calss コード。

package hello;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {
        return "Hello World";
    }

}



@RestController

このアノテーションはSpring MVCを利用してWebリクエストをハンドルすることを意味している。


@RequestMapping

上記のコードでは、このアノテーションで"/"を"index()"メソッドに割り当てている。ブラウザからこのURLにアクセスすると、index()メソッドは"Hellow World"を返す。


"Hello Application"クラスにコードを追加する。

package hello;

import java.util.Arrays;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class HelloApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {

            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for (String beanName : beanNames) {
                System.out.println(beanName);
            }

        };
    }
}

@SpringBootApplication

このアノテーションを付加することによって、Spring Boot アプリケーションであることを指定する。複数のアノテーションをまとめたようなものではあるのだが、詳細は調べていない。


@Bean

起動時に実行されることを意味する。


プロジェクトを右クリックし、Run Asを選択。Spring Boot Appをクリック。コンソールに下記のようなメッセージが表示される。

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v2.0.2.RELEASE)

2018-05-18 22:18:45.804  INFO 4276 --- [           main] hello.HelloApplication                   : Starting HelloApplication on home-PC with PID 4276 (C:\pleiades\workspace\hello\target\classes started by HITOSHI in C:\pleiades\workspace\hello)
2018-05-18 22:18:45.804  INFO 4276 --- [           main] hello.HelloApplication                   : No active profile set, falling back to default profiles: default
2018-05-18 22:18:45.851  INFO 4276 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@240237d2: startup date [Fri May 18 22:18:45 JST 2018]; root of context hierarchy
2018-05-18 22:18:47.037  INFO 4276 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2018-05-18 22:18:47.095  INFO 4276 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-05-18 22:18:47.095  INFO 4276 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.31
2018-05-18 22:18:47.111  INFO 4276 --- [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:\pleiades\java\8\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/pleiades/eclipse/jre/bin/../jre/bin/server;C:/pleiades/eclipse/jre/bin/../jre/bin;C:/pleiades/eclipse/jre/bin/../jre/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\EmEditor;C:\Program Files (x86)\Heroku\bin;C:\Program Files (x86)\git\cmd;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Java\jdk1.8.0_25\bin;C:\Program Files\Git\cmd;C:\RailsInstaller\Git\cmd;C:\RailsInstaller\Ruby2.3.3\bin;C:\Users\HITOSHI\Anaconda3;C:\Users\HITOSHI\Anaconda3\Scripts;C:\Users\HITOSHI\Anaconda3\Library\bin;C:\Program Files (x86)\Microsoft VS Code\bin;C:\Program Files\Heroku\bin;C:\Program Files\PostgreSQL\10\bin;C:\pleiades\eclipse;;.]
2018-05-18 22:18:47.251  INFO 4276 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-05-18 22:18:47.251  INFO 4276 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1400 ms
2018-05-18 22:18:47.407  INFO 4276 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-05-18 22:18:47.407  INFO 4276 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-05-18 22:18:47.407  INFO 4276 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-05-18 22:18:47.407  INFO 4276 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-05-18 22:18:47.407  INFO 4276 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-05-18 22:18:47.548  INFO 4276 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-18 22:18:47.798  INFO 4276 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@240237d2: startup date [Fri May 18 22:18:45 JST 2018]; root of context hierarchy
2018-05-18 22:18:47.861  INFO 4276 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String hello.HelloController.index()
2018-05-18 22:18:47.861  INFO 4276 --- [           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)
2018-05-18 22:18:47.861  INFO 4276 --- [           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)
2018-05-18 22:18:47.908  INFO 4276 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-18 22:18:47.908  INFO 4276 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-18 22:18:47.954  WARN 4276 --- [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2018-05-18 22:18:48.095  INFO 4276 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-05-18 22:18:48.149  INFO 4276 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-05-18 22:18:48.165  INFO 4276 --- [           main] hello.HelloApplication                   : Started HelloApplication in 2.963 seconds (JVM running for 4.528)
basicErrorController
beanNameHandlerMapping
beanNameViewResolver
characterEncodingFilter
commandLineRunner
conventionErrorViewResolver
defaultServletHandlerMapping
defaultTemplateResolver
defaultValidator
defaultViewResolver
dispatcherServlet
dispatcherServletRegistration
error
errorAttributes
errorPageCustomizer
errorPageRegistrarBeanPostProcessor
faviconHandlerMapping
faviconRequestHandler
handlerExceptionResolver
helloApplication
helloController
hiddenHttpMethodFilter
httpPutFormContentFilter
httpRequestHandlerAdapter
jacksonCodecCustomizer
jacksonObjectMapper
jacksonObjectMapperBuilder
java8TimeDialect
jsonComponentModule
localeCharsetMappingsCustomizer
mainDispatcherServletPathProvider
mappingJackson2HttpMessageConverter
mbeanExporter
mbeanServer
messageConverters
methodValidationPostProcessor
multipartConfigElement
multipartResolver
mvcContentNegotiationManager
mvcConversionService
mvcHandlerMappingIntrospector
mvcPathMatcher
mvcResourceUrlProvider
mvcUriComponentsContributor
mvcUrlPathHelper
mvcValidator
mvcViewResolver
objectNamingStrategy
org.springframework.boot.autoconfigure.AutoConfigurationPackages
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
org.springframework.boot.autoconfigure.condition.BeanTypeRegistry
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration
org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration
org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration$JacksonCodecConfiguration
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$ThymeleafDefaultConfiguration
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$ThymeleafJava8TimeDialect
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletConfiguration
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter$FaviconConfiguration
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration
org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.event.internalEventListenerFactory
org.springframework.context.event.internalEventListenerProcessor
parameterNamesModule
preserveErrorControllerTargetClassPostProcessor
propertySourcesPlaceholderConfigurer
requestContextFilter
requestMappingHandlerAdapter
requestMappingHandlerMapping
resourceHandlerMapping
restTemplateBuilder
server-org.springframework.boot.autoconfigure.web.ServerProperties
servletWebServerFactoryCustomizer
simpleControllerHandlerAdapter
spring.http.encoding-org.springframework.boot.autoconfigure.http.HttpEncodingProperties
spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties
spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties
spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties
spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties
spring.security-org.springframework.boot.autoconfigure.security.SecurityProperties
spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties
spring.thymeleaf-org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties
springApplicationAdminRegistrar
standardJacksonObjectMapperBuilderCustomizer
stringHttpMessageConverter
templateEngine
thymeleafViewResolver
tomcatServletWebServerFactory
tomcatServletWebServerFactoryCustomizer
tomcatWebServerFactoryCustomizer
viewControllerHandlerMapping
viewResolver
webServerFactoryCustomizerBeanPostProcessor
websocketContainerCustomizer
welcomePageHandlerMapping


http://localhost:8080 にアクセスすると"Hello World"と表示される。