spring boot その1 - プロジェクト作成
実装したソースは https://github.com/huruyosiathatena/springboot/tree/f885430ac57db879e58cf281c75bec85a6dedac1 にあります。
Hello world
web アプリケーションを作成して hello world を目指します。
ほぼ、コピペです。
作成したプロジェクトは https://github.com/maakiyama/springboot にあります。
eclipseでプロジェクト作成
mavenプラグインを利用できる状態になっているeclipseで「Mavenプロジェクト」を作成します。 アーティファクトIDは「maven-archetype-quickstart」を選択します。
pom.xml を編集
http://docs.spring.io/spring-boot/docs/1.2.5.RELEASE/reference/htmlsingle/#getting-started-maven-installation を参考にしてプロジェクト作成後の pom.xml を編集します。ついでに2点変更します。
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.hatenablog.huruyosi</groupId> <artifactId>springboot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot</name> <url>http://huruyosi.hatenablog.com/archive/category/spring%20boot</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compile.source>1.8</maven.compile.source> <maven.compile.target>1.8</maven.compile.target> <java.version>1.8</java.version> </properties> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.5.RELEASE</version> </parent> <dependencies> <!-- Add typical dependencies for a web application --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version><!--$NO-MVN-MAN-VER$--> <scope>test</scope> </dependency> </dependencies> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
JDKのバージョンを 8にする
pom.xmlで JDKのバージョンを明示しているので、eclipseのプロジェクトのプロパティにある「Javaのビルドバス」の「ライブラリ」タブにある「JRE システムライブラリ」をJDK8にします。
コントローラーを作成
ここで利用するアノテーション * @Controller - SpringにControllerと識別させる。 * @RequestMapping("/hello") - Webリソースのマッピングを行う。 * @ResponseBody - メソッドの返り値がそのままレスポンスボディとする。(この場合文字列。)
package com.hatenablog.huruyosi.springboot.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "hello world"; } }
mainクラスを編集
プロジェクト作成時に生成された App.java を編集します。
- @ComponentScan - 定義パッケージ以下のSpringコンポーネントをスキャンする。
- @EnableAutoConfiguration - Springの自動設定を有効にする。
package com.hatenablog.huruyosi.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; /** * Hello world! * */ @ComponentScan @EnableAutoConfiguration public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
実行
App.java を右クリックして「実行」-> 「Javaアプリケーション」で実行します。 組み込みのtomcatが起動され、8080番ポートでリスニングするので webブラウザから http://localhost:8080/hello にアクセスすると、「hello world」と表示されます。
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.2.5.RELEASE) 2015-07-26 00:15:21.377 INFO 3868 --- [ main] com.hatenablog.huruyosi.springboot.App : Starting App on masahiro-PC with PID 3868 (E:\eclipse\pleiades-e4.3-java-32bit-jre_20130626\workspace-springboot\springboot\target\classes started by masahiro in E:\eclipse\pleiades-e4.3-java-32bit-jre_20130626\workspace-springboot\springboot) 2015-07-26 00:15:21.432 INFO 3868 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@25af5db5: startup date [Sun Jul 26 00:15:21 JST 2015]; root of context hierarchy 2015-07-26 00:15:22.066 INFO 3868 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]] 2015-07-26 00:15:23.786 INFO 3868 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 2015-07-26 00:15:24.630 INFO 3868 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat 2015-07-26 00:15:24.631 INFO 3868 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.23 2015-07-26 00:15:24.781 INFO 3868 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2015-07-26 00:15:24.782 INFO 3868 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3353 ms 2015-07-26 00:15:25.699 INFO 3868 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2015-07-26 00:15:25.704 INFO 3868 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2015-07-26 00:15:25.705 INFO 3868 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2015-07-26 00:15:26.230 INFO 3868 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@25af5db5: startup date [Sun Jul 26 00:15:21 JST 2015]; root of context hierarchy 2015-07-26 00:15:26.293 INFO 3868 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hello]}" onto public java.lang.String com.hatenablog.huruyosi.springboot.controllers.HelloController.hello() 2015-07-26 00:15:26.295 INFO 3868 --- [ 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.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2015-07-26 00:15:26.296 INFO 3868 --- [ 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.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest) 2015-07-26 00:15:26.320 INFO 3868 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2015-07-26 00:15:26.320 INFO 3868 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2015-07-26 00:15:26.361 INFO 3868 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2015-07-26 00:15:26.448 INFO 3868 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2015-07-26 00:15:26.593 INFO 3868 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2015-07-26 00:15:26.595 INFO 3868 --- [ main] com.hatenablog.huruyosi.springboot.App : Started App in 6.067 seconds (JVM running for 7.094) 2015-07-26 00:16:00.393 INFO 3868 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2015-07-26 00:16:00.394 INFO 3868 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2015-07-26 00:16:00.418 INFO 3868 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 24 ms