{"id":40448,"date":"2023-10-16T14:11:17","date_gmt":"2022-09-12T19:03:30","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/"},"modified":"2024-01-15T10:37:07","modified_gmt":"2024-01-15T02:37:07","slug":"spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/","title":{"rendered":"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0"},"content":{"rendered":"<p>\u867d\u7136\u6211\u6709\u4e00\u4e9b\u4f7f\u7528Spring\u7684\u7ecf\u9a8c\uff0c\u4f46\u6211\u4ece\u672a\u771f\u6b63\u63a5\u89e6\u8fc7Spring Boot\u3002\u8fd9\u662f\u6211\u7b2c\u4e00\u6b21\u5c1d\u8bd5\u4f7f\u7528Spring Boot\uff0c\u6211\u901a\u8fc7\u67e5\u9605\u5b98\u65b9\u6587\u6863\u6574\u7406\u4e86\u4e00\u4efd\u7c7b\u4f3c\u4e8e\u5c4f\u5e55\u5f55\u50cf\u7684\u5907\u5fd8\u5f55\u3002<\/p>\n<p>\u76ee\u524dSpring Boot\u7684\u7248\u672c\u662f\u6700\u65b0\u76841.3.0.RELEASE\u3002\u6211\u5728Mac OS X\u4e0a\u5de5\u4f5c\u3002\u4eceGetting Started\u5f00\u59cb\u505a\uff0c\u53d1\u73b0\u6587\u6863\u975e\u5e38\u5145\u5b9e\uff0c\u771f\u4e0d\u9519\u3002<\/p>\n<h2>\u4f7f\u7528Gradle\u8bbe\u7f6e\u9879\u76ee<\/h2>\n<p>\u5982\u679c\u60a8\u7684\u7535\u8111\u8fd8\u6ca1\u6709\u5b89\u88c5Gradle\uff0c\u8bf7\u5148\u5b89\u88c5\u3002\u622a\u81f3\u672c\u6587\u53d1\u5e03\u65f6\uff0c\u6700\u65b0\u7248\u672c\u662f2.9\u3002<\/p>\n<pre class=\"post-pre\"><code>brew <span class=\"nb\">install <\/span>gradle\r\n<\/code><\/pre>\n<p>\u8bf7\u8d34\u51fa\u4e00\u4e2abuild.gradle\u7684\u793a\u4f8b\uff0c\u5e76\u6267\u884cgradle wrapper\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">buildscript<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">repositories<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">jcenter<\/span><span class=\"o\">()<\/span>\r\n        <span class=\"n\">maven<\/span> <span class=\"o\">{<\/span> <span class=\"n\">url<\/span> <span class=\"s2\">\"http:\/\/repo.spring.io\/snapshot\"<\/span> <span class=\"o\">}<\/span>\r\n        <span class=\"n\">maven<\/span> <span class=\"o\">{<\/span> <span class=\"n\">url<\/span> <span class=\"s2\">\"http:\/\/repo.spring.io\/milestone\"<\/span> <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n    <span class=\"n\">dependencies<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">classpath<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"org.springframework.boot:spring-boot-gradle-plugin:1.3.0.RELEASE\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"n\">apply<\/span> <span class=\"nl\">plugin:<\/span> <span class=\"s1\">'java'<\/span>\r\n<span class=\"n\">apply<\/span> <span class=\"nl\">plugin:<\/span> <span class=\"s1\">'spring-boot'<\/span>\r\n\r\n<span class=\"n\">jar<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">baseName<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'myproject'<\/span>\r\n    <span class=\"n\">version<\/span> <span class=\"o\">=<\/span>  <span class=\"s1\">'0.0.1-SNAPSHOT'<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"n\">repositories<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">jcenter<\/span><span class=\"o\">()<\/span>\r\n    <span class=\"n\">maven<\/span> <span class=\"o\">{<\/span> <span class=\"n\">url<\/span> <span class=\"s2\">\"http:\/\/repo.spring.io\/snapshot\"<\/span> <span class=\"o\">}<\/span>\r\n    <span class=\"n\">maven<\/span> <span class=\"o\">{<\/span> <span class=\"n\">url<\/span> <span class=\"s2\">\"http:\/\/repo.spring.io\/milestone\"<\/span> <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"n\">dependencies<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">compile<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"org.springframework.boot:spring-boot-starter-web\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"n\">testCompile<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"org.springframework.boot:spring-boot-starter-test\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u76ee\u524d\u7684\u60c5\u51b5\u662f\u8fd9\u6837\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>tree\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 build.gradle\r\n\u251c\u2500\u2500 gradle\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 wrapper\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 gradle-wrapper.jar\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 gradle-wrapper.properties\r\n\u251c\u2500\u2500 gradlew\r\n\u2514\u2500\u2500 gradlew.bat\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5c1d\u8bd5\u4f7f\u7528Gradle Daemon\u6765\u51cf\u5c11\u6784\u5efa\u65f6\u95f4\u5462?<\/p>\n<pre class=\"post-pre\"><code>BUILD SUCCESSFUL\r\n\r\nTotal <span class=\"nb\">time<\/span>: 16.058 secs\r\n\r\nThis build could be faster, please consider using the Gradle Daemon: https:\/\/docs.gradle.org\/2.9\/userguide\/gradle_daemon.html\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>The Gradle Daemon is a background process that does the heavy lifting of running builds, then stays alive between builds waiting for the next build. This allows data and code that is likely to be required in the next build to be kept in memory, ready to go. This dramatically improves the performance of subsequent builds. Enabling the Gradle Daemon is an extremely cheap way to decrease build times.\r\n<\/code><\/pre>\n<p>\u7acb\u5373\u8fdb\u884c\u8bbe\u7f6e\u3002\u5728Mac OS\u4e2d\uff0c\u64cd\u4f5c\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">touch<\/span> ~\/.gradle\/gradle.properties <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">echo<\/span> <span class=\"s2\">\"org.gradle.daemon=true\"<\/span> <span class=\"o\">&gt;&gt;<\/span> ~\/.gradle\/gradle.properties\r\n<\/code><\/pre>\n<h2>\u5b89\u88c5Spring Boot CLI<\/h2>\n<p>\u9451\u65bc\u6b64\uff0c\u7531\u65bc\u807d\u8aaa\u5efa\u7acb\u539f\u578b\u975e\u5e38\u8fc5\u901f\uff0c\u6211\u6253\u7b97\u5148\u5b89\u88ddSpring Boot\u7684CLI\u5de5\u5177\u4f86\u5617\u8a66\u4e00\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code>The Spring Boot CLI is a command line tool that can be used if you want to quickly prototype with Spring\r\n<\/code><\/pre>\n<p>\u6211\u6700\u521d\u4ee5\u4e3a\u8981\u4e0b\u8f7dzip\u5e76\u8bbe\u7f6ePATH\uff0c\u4f46\u597d\u50cf\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e2a\u53eb\u4f5csdkman\u7684\u5de5\u5177\u6765\u5b89\u88c5\u3002\u867d\u7136\u6211\u4e0d\u592a\u4e86\u89e3\uff0c\u4f46\u4f3c\u4e4e\u5b83\u66fe\u7ecf\u662f\u53d7\u5230RVM \/ rbenv\u8fd9\u79cd\u5de5\u5177\u7684\u5f71\u54cd\uff0c\u7528\u4e8e\u7ba1\u7406Groovy\u73af\u5883\u7684GVM\uff08Groovy enVironment Manager\uff09\u3002<br \/>\n\u94fe\u63a5\uff1a<br \/>\nhttp:\/\/sdkman.io\/<br \/>\nhttp:\/\/qiita.com\/saba1024\/items\/967ee3d8a79440a97336<\/p>\n<p>\u6682\u65f6\u5148\u8bd5\u8bd5\u8fd9\u4e2a\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl -s http:\/\/get.sdkman.io | bash\r\n\r\nThanks for using...\r\n\r\n\r\n     SSSSSSSSSSSSSSS DDDDDDDDDDDDD       KKKKKKKKK    KKKKKKK\r\n   SS:::::::::::::::SD::::::::::::DDD    K:::::::K    K:::::K\r\n  S:::::SSSSSS::::::SD:::::::::::::::DD  K:::::::K    K:::::K\r\n  S:::::S     SSSSSSSDDD:::::DDDDD:::::D K:::::::K   K::::::K\r\n  S:::::S              D:::::D    D:::::DKK::::::K  K:::::KKK\r\n  S:::::S              D:::::D     D:::::D K:::::K K:::::K\r\n   S::::SSSS           D:::::D     D:::::D K::::::K:::::K\r\n    SS::::::SSSSS      D:::::D     D:::::D K:::::::::::K\r\n      SSS::::::::SS    D:::::D     D:::::D K:::::::::::K\r\n         SSSSSS::::S   D:::::D     D:::::D K::::::K:::::K\r\n              S:::::S  D:::::D     D:::::D K:::::K K:::::K\r\n              S:::::S  D:::::D    D:::::DKK::::::K  K:::::KKK\r\n  SSSSSSS     S:::::SDDD:::::DDDDD:::::D K:::::::K   K::::::K\r\n  S::::::SSSSSS:::::SD:::::::::::::::DD  K:::::::K    K:::::K\r\n  S:::::::::::::::SS D::::::::::::DDD    K:::::::K    K:::::K\r\n   SSSSSSSSSSSSSSS   DDDDDDDDDDDDD       KKKKKKKKK    KKKKKKK\r\n\r\n\r\n                      mmmmmmm    mmmmmmm     aaaaaaaaaaaaa  nnnn  nnnnnnnn\r\n                    mm:::::::m  m:::::::mm   a::::::::::::a n:::nn::::::::nn\r\n                   m::::::::::mm::::::::::m  aaaaaaaaa:::::an::::::::::::::nn\r\n                   m::::::::::::::::::::::m           a::::ann:::::::::::::::n\r\n                   m:::::mmm::::::mmm:::::m    aaaaaaa:::::a  n:::::nnnn:::::n\r\n                   m::::m   m::::m   m::::m  aa::::::::::::a  n::::n    n::::n\r\n                   m::::m   m::::m   m::::m a::::aaaa::::::a  n::::n    n::::n\r\n                   m::::m   m::::m   m::::ma::::a    a:::::a  n::::n    n::::n\r\n                   m::::m   m::::m   m::::ma::::a    a:::::a  n::::n    n::::n\r\n                   m::::m   m::::m   m::::ma:::::aaaa::::::a  n::::n    n::::n\r\n                   m::::m   m::::m   m::::m a::::::::::aa:::a n::::n    n::::n\r\n                   mmmmmm   mmmmmm   mmmmmm  aaaaaaaaaa  aaaa nnnnnn    nnnnnn\r\n\r\n\r\n                                                 Now attempting installation...\r\n\r\nLooking for a previous installation of SDKMAN...\r\nLooking for unzip...\r\nLooking for curl...\r\nLooking for sed...\r\nInstalling SDKMAN scripts...\r\nCreate distribution directories...\r\nGetting available candidates...\r\nPrime the config file...\r\nDownload script archive...\r\nExtract script archive...\r\nInstall scripts...\r\nSet version to 3.2.4 ...\r\nAttempt update of bash profiles...\r\nUpdated existing \/Users\/seratch\/.bash_profile\r\nCreated and initialised \/Users\/seratch\/.bashrc\r\nAttempt update of zsh profiles...\r\nCreated and initialised \/Users\/seratch\/.zshrc\r\n\r\n\r\n\r\nAll done!\r\n\r\n\r\nPlease open a new terminal, or run the following in the existing one:\r\n\r\n    source \"\/Users\/seratch\/.sdkman\/bin\/sdkman-init.sh\"\r\n\r\nThen issue the following command:\r\n\r\n    sdk help\r\n\r\nEnjoy!!!\r\n\r\n$ source \"\/Users\/seratch\/.sdkman\/bin\/sdkman-init.sh\"\r\n\r\n$ sdk help\r\n==== BROADCAST =================================================================\r\n* 17\/11\/15: Gradle 2.9 released on SDKMAN! #gradle\r\n* 16\/11\/15: Springboot 1.3.0.RELEASE released on SDKMAN! #springboot\r\n* 05\/11\/15: Vertx 3.1.0 released on SDKMAN! #vertx\r\n================================================================================\r\n\r\nUsage: sdk &lt;command&gt; [candidate] [version]\r\n       sdk offline &lt;enable|disable&gt;\r\n\r\n   commands:\r\n       install   or i    &lt;candidate&gt; [version]\r\n       uninstall or rm   &lt;candidate&gt; &lt;version&gt;\r\n       list      or ls   [candidate]\r\n       use       or u    &lt;candidate&gt; [version]\r\n       default   or d    &lt;candidate&gt; [version]\r\n       current   or c    [candidate]\r\n       outdated  or o    [candidate]\r\n       version   or v\r\n       broadcast or b\r\n       help      or h\r\n       offline           &lt;enable|disable&gt;\r\n       selfupdate        [force]\r\n       flush             &lt;candidates|broadcast|archives|temp&gt;\r\n\r\n   candidate  :  the SDK to install: groovy, scala, grails, akka, etc.\r\n                 use list command for comprehensive list of candidates\r\n                 eg: $ sdk list\r\n\r\n   version    :  where optional, defaults to latest stable if not provided\r\n                 eg: $ sdk install groovy\r\n\r\n$\r\n<\/code><\/pre>\n<p>\u65e0\u8bba\u600e\u6837\uff0c\u65e2\u7136\u53ef\u4ee5\u4f7f\u7528SDK\u547d\u4ee4\uff0c\u5c31\u5c1d\u8bd5\u5b89\u88c5SDK\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>sdk <span class=\"nb\">install <\/span>springboot\r\n\r\nDownloading: springboot 1.3.0.RELEASE\r\n\r\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\r\n                                 Dload  Upload   Total   Spent    Left  Speed\r\n  0     0    0     0    0     0      0      0 <span class=\"nt\">--<\/span>:--:-- <span class=\"nt\">--<\/span>:--:-- <span class=\"nt\">--<\/span>:--:--     0\r\n100 9094k  100 9094k    0     0   748k      0  0:00:12  0:00:12 <span class=\"nt\">--<\/span>:--:-- 1088k\r\n\r\nInstalling: springboot 1.3.0.RELEASE\r\nDone installing!\r\n\r\nDo you want springboot 1.3.0.RELEASE to be <span class=\"nb\">set <\/span>as default? <span class=\"o\">(<\/span>Y\/n<span class=\"o\">)<\/span>: y\r\n\r\nSetting springboot 1.3.0.RELEASE as default.\r\n<span class=\"err\">$<\/span>\r\n<\/code><\/pre>\n<p>\u770b\u8d77\u6765\u5df2\u7ecf\u5b8c\u6210\u4e86\u8bbe\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>$ spring\r\nusage: spring [--help] [--version]\r\n       &lt;command&gt; [&lt;args&gt;]\r\n\r\nAvailable commands are:\r\n\r\n  run [options] &lt;files&gt; [--] [args]\r\n    Run a spring groovy script\r\n\r\n  test [options] &lt;files&gt; [--] [args]\r\n    Run a spring groovy script test\r\n\r\n  grab\r\n    Download a spring groovy script's dependencies to .\/repository\r\n\r\n  jar [options] &lt;jar-name&gt; &lt;files&gt;\r\n    Create a self-contained executable jar file from a Spring Groovy script\r\n\r\n  war [options] &lt;war-name&gt; &lt;files&gt;\r\n    Create a self-contained executable war file from a Spring Groovy script\r\n\r\n  install [options] &lt;coordinates&gt;\r\n    Install dependencies to the lib directory\r\n\r\n  uninstall [options] &lt;coordinates&gt;\r\n    Uninstall dependencies from the lib directory\r\n\r\n  init [options] [location]\r\n    Initialize a new project using Spring Initialzr (start.spring.io)\r\n\r\n  shell\r\n    Start a nested shell\r\n\r\nCommon options:\r\n\r\n  -d, --debug Verbose mode\r\n    Print additional status information for the command you are running\r\n\r\n\r\nSee 'spring help &lt;command&gt;' for more information on a specific command.\r\n<\/code><\/pre>\n<p>\u987a\u4fbf\u8bf4\u4e00\u4e0b\uff0c\u6211\u6ce8\u610f\u5230\u4e86 sdkman \u7684 BROADCAST \u901a\u77e5\u680f\u4e0a\u5199\u7740\uff1a&#8221;Gradle\u548cVert.x\u5df2\u7ecf\u53d1\u5e03\u4e86\uff01&#8221;\uff0c\u4f46\u662f\u5f53\u6211\u5728 sdk list \u4e0a\u67e5\u770b\u5217\u8868\u65f6\uff0c\u53d1\u73b0\u8fd8\u6709\u5176\u4ed6\u4e00\u4e9b\u9009\u9879\uff0c\u5177\u4f53\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code>================================================================================\r\nAvailable Candidates\r\n================================================================================\r\nq-quit                                  \/-search down\r\nj-down                                  ?-search up\r\nk-up                                    h-help\r\n--------------------------------------------------------------------------------\r\nAsciidoctorJ (1.5.2)                                     http:\/\/asciidoctor.org\/\r\n\r\nAsciidoctorJ is the official library for running Asciidoctor on the JVM. Using\r\nAsciidoctorJ, you can convert AsciiDoc content or analyze the structure of a\r\nparsed AsciiDoc document from Java and other JVM languages.\r\n\r\n                                                      $ sdk install asciidoctorj\r\n--------------------------------------------------------------------------------\r\nCeylon (1.2.0)                                           http:\/\/ceylon-lang.org\/\r\n\r\nCeylon is a modern, modular, statically typed programming language for the Java\r\nand JavaScript virtual machines. The language features a flexible and very\r\nreadable syntax, a unique and uncommonly elegant static type system, a powerful\r\nmodule architecture, and excellent tooling.\r\n\r\n                                                            $ sdk install ceylon\r\n--------------------------------------------------------------------------------\r\nCRaSH (1.3.0)                                            http:\/\/www.crashub.org\/\r\n\r\nThe Common Reusable SHell (CRaSH) deploys in a Java runtime and provides\r\ninteractions with the JVM. Commands are written in Groovy or Java and can be\r\ndeveloped at runtime making the extension of the shell very easy with fast\r\ndevelopment cycle.\r\n\r\n                                                             $ sdk install crash\r\n--------------------------------------------------------------------------------\r\nGaiden (1.0)                                       http:\/\/kobo.github.io\/gaiden\/\r\n\r\nGaiden is a tool that makes it easy to create documentation with Markdown.\r\n\r\n                                                            $ sdk install gaiden\r\n--------------------------------------------------------------------------------\r\nGlide (0.3.3)                                      http:\/\/glide-gae.appspot.com\/\r\n\r\nGlide makes it incredibly easy to develop apps that harness the power of Google\r\nApp Engine for Java using expressiveness of Groovy and sweetness of Gaelyk's\r\nsyntactic sugar.\r\n\r\n                                                             $ sdk install glide\r\n--------------------------------------------------------------------------------\r\nGradle (2.9)                                                  http:\/\/gradle.org\/\r\n\r\nGradle is a build automation tool that builds upon the concepts of Apache Ant\r\nand Apache Maven and introduces a Groovy-based domain-specific language (DSL)\r\ninstead of the more traditional XML form of declaring the project\r\nconfiguration. Gradle uses a directed acyclic graph (DAG) to determine the\r\norder in which tasks can be run.\r\n\r\n                                                            $ sdk install gradle\r\n--------------------------------------------------------------------------------\r\nGrails (3.0.9)                                               https:\/\/grails.org\/\r\n\r\nGrails is a powerful web framework, for the Java platform aimed at multiplying\r\ndevelopers productivity thanks to a Convention-over-Configuration, sensible\r\ndefaults and opinionated APIs. It integrates smoothly with the JVM, allowing\r\nyou to be immediately productive whilst providing powerful features, including\r\nintegrated ORM, Domain-Specific Languages, runtime and compile-time\r\nmeta-programming and Asynchronous programming.\r\n\r\n                                                            $ sdk install grails\r\n--------------------------------------------------------------------------------\r\nGriffon (1.5.0)                                    http:\/\/griffon-framework.org\/\r\n\r\nGriffon is desktop application development platform for the JVM.Inspired by\r\nGrails, Griffon leverages the use of the Groovy language and concepts like\r\nConvention over Configuration. The Swing toolkit is the default UI toolkit of\r\nchoice however others may be used, for example JavaFX.\r\n\r\n                                                           $ sdk install griffon\r\n--------------------------------------------------------------------------------\r\nGroovy (2.4.5)                                       http:\/\/www.groovy-lang.org\/\r\n\r\nGroovy is a powerful, optionally typed and dynamic language, with static-typing\r\nand static compilation capabilities, for the Java platform aimed at multiplying\r\ndevelopers' productivity thanks to a concise, familiar and easy to learn\r\nsyntax. It integrates smoothly with any Java program, and immediately delivers\r\nto your application powerful features, including scripting capabilities,\r\nDomain-Specific Language authoring, runtime and compile-time meta-programming\r\nand functional programming.\r\n\r\n                                                            $ sdk install groovy\r\n--------------------------------------------------------------------------------\r\nGroovyServ (1.0.0)                            https:\/\/kobo.github.io\/groovyserv\/\r\n\r\nGroovyServ reduces startup time of the JVM for runnning Groovy significantly.\r\nIt depends on your environments, but in most cases, it\u2019s 10 to 20 times faster\r\nthan regular Groovy.\r\n\r\n                                                        $ sdk install groovyserv\r\n--------------------------------------------------------------------------------\r\nJBake (2.4.0)                                                  http:\/\/jbake.org\/\r\n\r\nJBake is a Java based, open source, static site\/blog generator for developers\r\nand designers.\r\n\r\n                                                             $ sdk install jbake\r\n--------------------------------------------------------------------------------\r\nJBoss Forge (2.17.0.Final)                               http:\/\/forge.jboss.org\/\r\n\r\nJBoss Forge is the Fastest way to build Maven-based Java EE projects, and\r\nanything else you fancy.\r\n\r\n                                                        $ sdk install jbossforge\r\n--------------------------------------------------------------------------------\r\nLazybones (0.8.1)                        https:\/\/github.com\/pledbrook\/lazybones\/\r\n\r\nLazybones allows you to create a new project structure for any framework or\r\nlibrary for which the tool has a template.\r\n\r\n                                                         $ sdk install lazybones\r\n--------------------------------------------------------------------------------\r\nMaven (3.3.3)                                          https:\/\/maven.apache.org\/\r\n\r\nApache Maven is a software project management and comprehension tool. Based on\r\nthe concept of a project object model (POM), Maven can manage a project's\r\nbuild, reporting and documentation from a central piece of information.\r\n\r\n                                                             $ sdk install maven\r\n--------------------------------------------------------------------------------\r\nsbt (0.13.9)                                           http:\/\/www.scala-sbt.org\/\r\n\r\nSBT is an open source build tool for Scala and Java projects, similar to Java's\r\nMaven or Ant. Its main features are: native support for compiling Scala code\r\nand integrating with many Scala test frameworks; build descriptions written in\r\nScala using a DSL; dependency management using Ivy (which supports Maven-format\r\nrepositories); continuous compilation, testing, and deployment; integration\r\nwith the Scala interpreter for rapid iteration and debugging; support for mixed\r\nJava\/Scala projects\r\n\r\n                                                               $ sdk install sbt\r\n--------------------------------------------------------------------------------\r\nScala (2.11.7)                                        http:\/\/www.scala-lang.org\/\r\n\r\nScala is a programming language for general software applications. Scala has\r\nfull support for functional programming and a very strong static type system.\r\nThis allows programs written in Scala to be very concise and thus smaller in\r\nsize than other general-purpose programming languages. Scala source code is\r\nintended to be compiled to Java bytecode, so that the resulting executable code\r\nruns on a Java virtual machine. Java libraries may be used directly in Scala\r\ncode and vice versa. Scala is object-oriented, and uses a curly-brace syntax.\r\nScala has many features of functional programming languages, including\r\ncurrying, type inference, immutability, lazy evaluation, and pattern matching.\r\nIt also has an advanced type system supporting algebraic data types, covariance\r\nand contravariance, higher-order types, and anonymous types. Other features of\r\nScala include operator overloading, optional parameters, named parameters, raw\r\nstrings, and no checked exceptions.\r\n\r\n                                                             $ sdk install scala\r\n--------------------------------------------------------------------------------\r\nSpring Boot (1.3.0.RELEASE)               http:\/\/projects.spring.io\/spring-boot\/\r\n\r\nSpring Boot takes an opinionated view of building production-ready Spring\r\napplications. It favors convention over configuration and is designed to get\r\nyou up and running as quickly as possible.\r\n\r\n                                                        $ sdk install springboot\r\n--------------------------------------------------------------------------------\r\nVert.x (3.1.0)                                                  http:\/\/vertx.io\/\r\n\r\nVert.x is a tool-kit for building reactive applications on the JVM.\r\n\r\n                                                             $ sdk install vertx\r\n--------------------------------------------------------------------------------\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u4e2a\u914d\u7f6e\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u7684\u5de5\u5177\uff08Maven\u3001Gradle\u3001sbt\u3001scala\uff09\u57fa\u672c\u4e0a\u90fd\u53ef\u4ee5\u5728 Homebrew \u4e2d\u627e\u5230\uff0c\u6240\u4ee5\u6211\u89c9\u5f97\u53ea\u662f\u4e3a\u4e86\u8fd9\u4e9b\u5de5\u5177\u800c\u5b89\u88c5 sdkman \u53ef\u80fd\u6709\u4e9b\u5fae\u5999\u3002\u7136\u800c\uff0c\u5728\u63a5\u4e0b\u6765\u7684\u300c10.2.3 OSX Homebrew installation\u300d\u90e8\u5206\u4ecb\u7ecd\u4e86\u5982\u4f55\u5728 Homebrew \u4e2d\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<p>\u4e3a\u4e86\u5728 Homebrew \u4e0a\u5b89\u88c5\uff0c\u9996\u5148\u9700\u8981\u5378\u8f7d\u901a\u8fc7 sdkman \u5b89\u88c5\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sdk uninstall springboot 1.3.0.RELEASE\r\n\r\nUnselecting springboot 1.3.0.RELEASE...\r\n\r\nUninstalling springboot 1.3.0.RELEASE...\r\n<\/code><\/pre>\n<p>\u7136\u540e\u901a\u8fc7Homebrew\u91cd\u65b0\u5b89\u88c5\u3002\u5728Homebrew\u7684\u5b98\u65b9\u5e93\u4e2d\u627e\u4e0d\u5230\u6b64\u8f6f\u4ef6\uff0c\u4f3c\u4e4e\u9700\u8981\u901a\u8fc7Pivotal\u7684GitHub\u4ed3\u5e93\u6765\u4f7f\u7528brew tap\u547d\u4ee4\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code>$ brew tap pivotal\/tap\r\n$ brew install springboot\r\n<\/code><\/pre>\n<p>Spring Boot CLI\u7684\u5b89\u88c5\u5c31\u5230\u8fd9\u91cc\u3002<\/p>\n<h2>\u8fd0\u884cSpring Boot\u7684Web\u5e94\u7528\u7a0b\u5e8f<\/h2>\n<p>\u770b\u4e86\u300c10.2.6 \u5feb\u901f\u5165\u95e8 Spring CLI \u793a\u4f8b\u300d<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">@RestController<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">ThisWillActuallyRun<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"\/\"<\/span><span class=\"o\">)<\/span>\r\n  <span class=\"n\">String<\/span> <span class=\"nf\">home<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"s2\">\"Hello World!\"<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u542c\u8bf4\u4fdd\u5b58\u4e0b\u8fd9\u6bb5 Groovy \u4ee3\u7801\u4e3a app.groovy\uff0c\u7136\u540e\u8fd0\u884c spring run app.groovy \u5c31\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c&#8230;\u771f\u7684\u5417\uff1f\u8fd9\u610f\u5473\u7740\u4e0d\u4ec5\u4ec5\u53ef\u4ee5\u7528 Grape \u6765\u89e3\u51b3\u6700\u4f4e\u9650\u5ea6\u7684\u4f9d\u8d56\u5e93\uff0c\u8fd8\u9ed8\u8ba4\u89e3\u51b3\u4e86\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5bfc\u5165\u95ee\u9898\u3002<\/p>\n<pre class=\"post-pre\"><code>$ spring run app.groovy\r\nResolving dependencies...........................\r\n\r\n  .   ____          _            __ _ _\r\n \/\\\\ \/ ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\r\n( ( )\\___ | '_ | '_| | '_ \\\/ _` | \\ \\ \\ \\\r\n \\\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\r\n  '  |____| .__|_| |_|_| |_\\__, | \/ \/ \/ \/\r\n =========|_|==============|___\/=\/_\/_\/_\/\r\n :: Spring Boot ::        (v1.3.0.RELEASE)\r\n\r\n2015-11-23 16:06:26.616  INFO 53470 --- [       runner-0] o.s.boot.SpringApplication               : Starting application on seratchs-MacBook-Pro.local with PID 53470 (\/Users\/seratch\/.m2\/repository\/org\/springframework\/boot\/spring-boot\/1.3.0.RELEASE\/spring-boot-1.3.0.RELEASE.jar started by seratch in \/Users\/seratch\/Documents\/github\/spring-boot-example)\r\n2015-11-23 16:06:26.619  INFO 53470 --- [       runner-0] o.s.boot.SpringApplication               : No profiles are active\r\n2015-11-23 16:06:27.004  INFO 53470 --- [       runner-0] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@517a4e29: startup date [Mon Nov 23 16:06:27 JST 2015]; root of context hierarchy\r\n2015-11-23 16:06:28.414  INFO 53470 --- [       runner-0] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: 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]]\r\n2015-11-23 16:06:29.166  INFO 53470 --- [       runner-0] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)\r\n2015-11-23 16:06:29.181  INFO 53470 --- [       runner-0] o.apache.catalina.core.StandardService   : Starting service Tomcat\r\n2015-11-23 16:06:29.183  INFO 53470 --- [       runner-0] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat\/8.0.28\r\n2015-11-23 16:06:29.267  INFO 53470 --- [ost-startStop-1] org.apache.catalina.loader.WebappLoader  : Unknown loader org.springframework.boot.cli.compiler.ExtendedGroovyClassLoader$DefaultScopeParentClassLoader@6598a08d class org.springframework.boot.cli.compiler.ExtendedGroovyClassLoader$DefaultScopeParentClassLoader\r\n2015-11-23 16:06:29.288  INFO 53470 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[\/]       : Initializing Spring embedded WebApplicationContext\r\n2015-11-23 16:06:29.288  INFO 53470 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2284 ms\r\n2015-11-23 16:06:29.754  INFO 53470 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [\/]\r\n2015-11-23 16:06:29.763  INFO 53470 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [\/*]\r\n2015-11-23 16:06:29.763  INFO 53470 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [\/*]\r\n2015-11-23 16:06:29.764  INFO 53470 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'httpPutFormContentFilter' to: [\/*]\r\n2015-11-23 16:06:29.764  INFO 53470 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'requestContextFilter' to: [\/*]\r\n2015-11-23 16:06:30.114  INFO 53470 --- [       runner-0] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@517a4e29: startup date [Mon Nov 23 16:06:27 JST 2015]; root of context hierarchy\r\n2015-11-23 16:06:30.200  INFO 53470 --- [       runner-0] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped \"{[\/]}\" onto public java.lang.String ThisWillActuallyRun.home()\r\n2015-11-23 16:06:30.203  INFO 53470 --- [       runner-0] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped \"{[\/error]}\" onto public org.springframework.http.ResponseEntity&lt;java.util.Map&lt;java.lang.String, java.lang.Object&gt;&gt; org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)\r\n2015-11-23 16:06:30.203  INFO 53470 --- [       runner-0] 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)\r\n2015-11-23 16:06:30.246  INFO 53470 --- [       runner-0] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [\/webjars\/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]\r\n2015-11-23 16:06:30.246  INFO 53470 --- [       runner-0] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [\/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]\r\n2015-11-23 16:06:30.300  INFO 53470 --- [       runner-0] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [\/**\/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]\r\n2015-11-23 16:06:30.816  INFO 53470 --- [       runner-0] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup\r\n2015-11-23 16:06:30.921  INFO 53470 --- [       runner-0] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)\r\n2015-11-23 16:06:30.926  INFO 53470 --- [       runner-0] o.s.boot.SpringApplication               : Started application in 4.858 seconds (JVM running for 36.749)\r\n<\/code><\/pre>\n<p>\u786e\u5b9e\u542f\u52a8\u4e86\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cTomcat 8 \u542f\u52a8\u3002\u5f53\u8bbf\u95ee localhost:8080 \u65f6\uff0c\u5c06\u8fd4\u56de\u4e00\u4e2a\u5e26\u6709\u201cHello World!\u201d\u5185\u5bb9\u7684\u54cd\u5e94\u4f53\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl -v http:\/\/localhost:8080\/\r\n*   Trying ::1...\r\n* Connected to localhost (::1) port 8080 (#0)\r\n&gt; GET \/ HTTP\/1.1\r\n&gt; Host: localhost:8080\r\n&gt; User-Agent: curl\/7.43.0\r\n&gt; Accept: *\/*\r\n&gt;\r\n&lt; HTTP\/1.1 200 OK\r\n&lt; Server: Apache-Coyote\/1.1\r\n&lt; Content-Type: text\/plain;charset=UTF-8\r\n&lt; Content-Length: 12\r\n&lt; Date: Mon, 23 Nov 2015 07:08:10 GMT\r\n&lt;\r\n* Connection #0 to host localhost left intact\r\nHello World!$\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u6682\u65f6\u6ca1\u6709\u7279\u522b\u9700\u8981\u52a8\u624b\u7684\u5730\u65b9\uff0c\u6240\u4ee5\u8df3\u8fc7\u4e00\u5c0f\u6bb5\uff0c\u63a5\u4e0b\u6765\u8bd5\u7740\u8fd0\u884c\u300c11.3 \u7f16\u5199\u4ee3\u7801\u300d\u4e2d\u7684Java\u793a\u4f8b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> src\/main\/java\/\r\n\r\n<span class=\"nb\">echo<\/span> <span class=\"s1\">'import org.springframework.boot.*;\r\nimport org.springframework.boot.autoconfigure.*;\r\nimport org.springframework.stereotype.*;\r\nimport org.springframework.web.bind.annotation.*;\r\n@RestController\r\n@EnableAutoConfiguration\r\npublic class Example {\r\n    @RequestMapping(\"\/\")\r\n    String home() {\r\n        return \"Hello World!\";\r\n    }\r\n    public static void main(String[] args) throws Exception {\r\n        SpringApplication.run(Example.class, args);\r\n    }\r\n}'<\/span> <span class=\"o\">&gt;<\/span> src\/main\/java\/Example.java\r\n<\/code><\/pre>\n<p>\u6700\u521d\u6211\u5df2\u7ecf\u4f7f\u7528Gradle\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u6700\u5c0f\u7684Spring Boot\u9879\u76ee\uff0c\u6240\u4ee5\u53ea\u9700\u653e\u7f6e\u6e90\u4ee3\u7801\u5373\u53ef\u4f7f\u7528Gradle\u4efb\u52a1bootRun\u6765\u542f\u52a8\u3002\u800cGradle\u7684\u4efb\u52a1\u5217\u8868\u53ef\u4ee5\u901a\u8fc7tasks\u547d\u4ee4\u6765\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/gradlew tasks\r\n:tasks\r\n\r\n------------------------------------------------------------\r\nAll tasks runnable from root project\r\n------------------------------------------------------------\r\n\r\nApplication tasks\r\n-----------------\r\nbootRun - Run the project with support for auto-detecting main class and reloading static resources\r\n\r\n\uff08\u4ee5\u4e0b\u7565\uff09\r\n<\/code><\/pre>\n<p>\u770b\u8d77\u6765\uff0cbootRun\u652f\u6301\u68c0\u6d4b\u4e3b\u7c7b\u548c\u9759\u6001\u6587\u4ef6\u7684\u70ed\u52a0\u8f7d\u3002<\/p>\n<pre class=\"post-pre\"><code>.\/gradlew bootRun\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u4e5f\u5b8c\u5168\u4ee5\u540c\u6837\u7684\u65b9\u5f0f\u8fd0\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl -v localhost:8080\r\n* Rebuilt URL to: localhost:8080\/\r\n*   Trying ::1...\r\n* Connected to localhost (::1) port 8080 (#0)\r\n&gt; GET \/ HTTP\/1.1\r\n&gt; Host: localhost:8080\r\n&gt; User-Agent: curl\/7.43.0\r\n&gt; Accept: *\/*\r\n&gt;\r\n&lt; HTTP\/1.1 200 OK\r\n&lt; Server: Apache-Coyote\/1.1\r\n&lt; Content-Type: text\/plain;charset=UTF-8\r\n&lt; Content-Length: 12\r\n&lt; Date: Mon, 23 Nov 2015 07:15:28 GMT\r\n&lt;\r\n* Connection #0 to host localhost left intact\r\nHello World!$\r\n<\/code><\/pre>\n<p>\u4ece\u8fd9\u91cc\u5f00\u59cb\u7684\u6587\u6863\u4e0d\u4ec5\u5305\u62ec Gradle\uff0c\u8fd8\u6709\u5173\u4e8e Maven\u3001Ant \u7684\u6784\u5efa\u65b9\u6cd5\u4ee5\u53ca\u4e0a\u9762\u7c98\u8d34\u7684 build.gradle \u7684\u8bf4\u660e\u7b49\u7b49\uff0c\u56e0\u6b64\u8df3\u8fc7\u8fd9\u90e8\u5206\uff0c\u8fdb\u5165\u5230 &#8220;III. \u4f7f\u7528 Spring Boot&#8221;\uff0c\u5e76\u5c1d\u8bd5 &#8220;14.2 \u5b9a\u4f4d\u4e3b\u5e94\u7528\u7a0b\u5e8f\u7c7b&#8221; \u7684\u793a\u4f8b\u3002<\/p>\n<p>\u5c06 src\/main\/java\/Example.java \u5220\u9664\uff0c\u6dfb\u52a0 src\/main\/java\/myproject\/Application.java\u3002\u6682\u65f6\u53ef\u4ee5\u5c06 Example.java \u4e2d\u7684\u5185\u5bb9\u76f4\u63a5\u590d\u5236\u5230\u65b0\u7684\u6587\u4ef6\u4e2d\u4ee5\u786e\u4fdd\u5176\u6b63\u5e38\u8fd0\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">myproject<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.*<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.autoconfigure.*<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.stereotype.*<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.context.annotation.*<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.*<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Configuration<\/span>\r\n<span class=\"nd\">@EnableAutoConfiguration<\/span>\r\n<span class=\"nd\">@ComponentScan<\/span>\r\n<span class=\"nd\">@RestController<\/span> <span class=\"c1\">\/\/ TODO: move<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">args<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nc\">SpringApplication<\/span><span class=\"o\">.<\/span><span class=\"na\">run<\/span><span class=\"o\">(<\/span><span class=\"nc\">Application<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"n\">args<\/span><span class=\"o\">);<\/span>\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">)<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">home<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span> <span class=\"k\">return<\/span> <span class=\"s\">\"Hello World!\"<\/span><span class=\"o\">;<\/span> <span class=\"o\">}<\/span> <span class=\"c1\">\/\/ TODO: move<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u91cd\u65b0\u8fd0\u884c .\/gradlew bootRun\uff0c\u5e76\u786e\u8ba4\u5b83\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\u3002<\/p>\n<p>\u4e0b\u4e00\u6b65\u662f\u5c06 RestController \u5206\u79bb\u51fa\u6765\u3002myproject.Application \u53ea\u8d1f\u8d23\u4e3b\u8981\u7684\u521d\u59cb\u5316\u548c\u6574\u4e2a Spring \u7684\u914d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ src\/main\/java\/myproject\/Application.java<\/span>\r\n<span class=\"kn\">package<\/span> <span class=\"nn\">myproject<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.*<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.autoconfigure.*<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.stereotype.*<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.context.annotation.*<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Configuration<\/span>\r\n<span class=\"nd\">@EnableAutoConfiguration<\/span>\r\n<span class=\"nd\">@ComponentScan<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">args<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nc\">SpringApplication<\/span><span class=\"o\">.<\/span><span class=\"na\">run<\/span><span class=\"o\">(<\/span><span class=\"nc\">Application<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"n\">args<\/span><span class=\"o\">);<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5c06\u8def\u7531\u548c\u5904\u7406\u65b9\u6cd5\u90fd\u79fb\u52a8\u5230 myproject.web.HomeController \u4e2d\u3002\u5982\u679c\u5728 myproject.Application \u4e2d\u6307\u5b9a\u4e86 ComponentScan \u6ce8\u89e3\uff0c\u5c06 myproject \u4f5c\u4e3a\u6839\u5305\u8fdb\u884c\u81ea\u52a8\u7ec4\u4ef6\u626b\u63cf\uff0c\u90a3\u4e48\u53ea\u9700\u5728\u7c7b\u4e0a\u6dfb\u52a0 RestController \u6ce8\u89e3\uff0c\u5c31\u53ef\u4ee5\u81ea\u52a8\u8bc6\u522b\u4e3a\u5df2\u8bbe\u7f6e\u8def\u7531\u4fe1\u606f\u7684\u7ec4\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ src\/main\/java\/myproject\/web\/HomeController.java<\/span>\r\n<span class=\"kn\">package<\/span> <span class=\"nn\">myproject.web<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.*<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@RestController<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">HomeController<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">)<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">home<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span> <span class=\"k\">return<\/span> <span class=\"s\">\"Hello World!\"<\/span><span class=\"o\">;<\/span> <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u91cd\u65b0\u542f\u52a8.\/gradlew bootRun \u5e76\u8fdb\u884c\u64cd\u4f5c\u786e\u8ba4\u3002<\/p>\n<p>\u8fc4\u4eca\u4e3a\u6b62\u6bcf\u6b21\u66f4\u6539Java\u4ee3\u7801\u65f6\uff0c\u90fd\u9700\u8981\u91cd\u65b0\u542f\u52a8Gradle\uff0c\u4e0d\u8fc7\u597d\u50cf\u6709\u4e00\u79cd\u53ef\u4ee5\u8fdb\u884c\u70ed\u91cd\u8f7d\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5c31\u662fSpring Loaded\u3002<br \/>\n\u94fe\u63a5\uff1ahttps:\/\/github.com\/spring-projects\/spring-loaded<\/p>\n<p>\u901a\u5e38\u5728\u6d89\u53caSpring\u7684\u9879\u76ee\u4e2d\uff0c\u6211\u4eec\u7ecf\u5e38\u4f7f\u7528JUnit\u8fdb\u884c\u5355\u5143\u6d4b\u8bd5\u6765\u8fdb\u884c\u9a8c\u8bc1\uff0c\u56e0\u6b64\u5e76\u4e0d\u9700\u8981\u5c06Servlet\u5bb9\u5668\u4fdd\u6301\u81ea\u52a8\u5f00\u542f\u5e76\u81ea\u52a8\u91cd\u65b0\u52a0\u8f7d\u7c7b\uff0c\u56e0\u6b64\u6211\u4ece\u672a\u4f7f\u7528\u8fc7Spring Loaded\uff08\u5c3d\u7ba1\u5b9e\u9645\u4e0a\u4f7f\u7528\u5b83\u786e\u5b9e\u4f1a\u6709\u4e00\u4e9b\u4e0d\u4fbf\uff09\u3002<\/p>\n<p>\u770b\u4e86\u8fd9\u7bc7\u6587\u7ae0\u540e\uff0c\u53d1\u73b0\u53ef\u4ee5\u8f7b\u677e\u5730\u8fdb\u884c\u534f\u4f5c\uff0c\u56e0\u6b64\u51b3\u5b9a\u8bd5\u4e00\u8bd5\u3002<br \/>\nhttp:\/\/qiita.com\/Sa2\/items\/c3150e3d43698cd67ff1<\/p>\n<p>\u6b64\u5916\uff0c\u6211\u89c9\u5f97\u5e94\u8be5\u5230\u4e86\u8981\u4f7f\u7528IDE\u7684\u65f6\u5019\u4e86\uff0c\u6240\u4ee5\u6211\u51b3\u5b9a\u50cf\u5f80\u5e38\u4e00\u6837\u4f7f\u7528IntelliJ IDEA\u3002<\/p>\n<h2>IntelliJ IDEA + Spring Loaded = IntelliJ IDEA \u52a0 Spring Loaded<\/h2>\n<p>\u9996\u5148\u6dfb\u52a0 idea \u63d2\u4ef6\u3002idea \u5757\u662f\u4e3a\u4e86\u4f7f IDEA \u5c06 class \u6587\u4ef6\u8f93\u51fa\u5230\u4e0e Gradle \u7684\u8f93\u51fa\u76ee\u5f55\u76f8\u5339\u914d\uff0c\u56e0\u6b64\u76f4\u63a5\u590d\u5236\u7c98\u8d34\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">apply<\/span> <span class=\"nl\">plugin:<\/span> <span class=\"s1\">'idea'<\/span>\r\n\r\n<span class=\"n\">idea<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">module<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">inheritOutputDirs<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span>\r\n        <span class=\"n\">outputDir<\/span> <span class=\"o\">=<\/span> <span class=\"n\">file<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"$buildDir\/classes\/main\/\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u60f3\u6cd5\u88ab\u6dfb\u52a0\u4e86\u4e00\u4e2a\u4efb\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/gradlew tasks\r\n\uff08\u4e2d\u7565\uff09\r\n\r\nIDE tasks\r\n---------\r\ncleanIdea - Cleans IDEA project files (IML, IPR)\r\nidea - Generates IDEA project files (IML, IPR, IWS)\r\n\r\n\uff08\u4ee5\u4e0b\u7565\uff09\r\n<\/code><\/pre>\n<p>\u7acb\u5373\u8fd0\u884c\u5e76\u8f93\u51fa IDEA \u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/gradlew idea\r\nStarting a new Gradle Daemon for this build (subsequent builds will be faster).\r\n:ideaModule\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter-test\/1.3.0.RELEASE\/spring-boot-starter-test-1.3.0.RELEASE.pom\r\nDownload https:\/\/jcenter.bintray.com\/org\/mockito\/mockito-core\/1.10.19\/mockito-core-1.10.19.pom\r\nDownload https:\/\/jcenter.bintray.com\/org\/hamcrest\/hamcrest-library\/1.3\/hamcrest-library-1.3.pom\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-test\/4.2.3.RELEASE\/spring-test-4.2.3.RELEASE.pom\r\nDownload https:\/\/jcenter.bintray.com\/org\/objenesis\/objenesis\/2.1\/objenesis-2.1.pom\r\nDownload https:\/\/jcenter.bintray.com\/org\/objenesis\/objenesis-parent\/2.1\/objenesis-parent-2.1.pom\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter-test\/1.3.0.RELEASE\/spring-boot-starter-test-1.3.0.RELEASE.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/mockito\/mockito-core\/1.10.19\/mockito-core-1.10.19.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/hamcrest\/hamcrest-library\/1.3\/hamcrest-library-1.3.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-test\/4.2.3.RELEASE\/spring-test-4.2.3.RELEASE.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/objenesis\/objenesis\/2.1\/objenesis-2.1.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter-web\/1.3.0.RELEASE\/spring-boot-starter-web-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-devtools\/1.3.0.RELEASE\/spring-boot-devtools-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter-test\/1.3.0.RELEASE\/spring-boot-starter-test-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter\/1.3.0.RELEASE\/spring-boot-starter-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter-tomcat\/1.3.0.RELEASE\/spring-boot-starter-tomcat-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter-validation\/1.3.0.RELEASE\/spring-boot-starter-validation-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/com\/fasterxml\/jackson\/core\/jackson-databind\/2.6.3\/jackson-databind-2.6.3-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-web\/4.2.3.RELEASE\/spring-web-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-webmvc\/4.2.3.RELEASE\/spring-webmvc-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot\/1.3.0.RELEASE\/spring-boot-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-autoconfigure\/1.3.0.RELEASE\/spring-boot-autoconfigure-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/junit\/junit\/4.12\/junit-4.12-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/mockito\/mockito-core\/1.10.19\/mockito-core-1.10.19-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/hamcrest\/hamcrest-core\/1.3\/hamcrest-core-1.3-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/hamcrest\/hamcrest-library\/1.3\/hamcrest-library-1.3-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-core\/4.2.3.RELEASE\/spring-core-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-test\/4.2.3.RELEASE\/spring-test-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/boot\/spring-boot-starter-logging\/1.3.0.RELEASE\/spring-boot-starter-logging-1.3.0.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/yaml\/snakeyaml\/1.16\/snakeyaml-1.16-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/apache\/tomcat\/embed\/tomcat-embed-core\/8.0.28\/tomcat-embed-core-8.0.28-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/apache\/tomcat\/embed\/tomcat-embed-el\/8.0.28\/tomcat-embed-el-8.0.28-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/apache\/tomcat\/embed\/tomcat-embed-logging-juli\/8.0.28\/tomcat-embed-logging-juli-8.0.28-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/apache\/tomcat\/embed\/tomcat-embed-websocket\/8.0.28\/tomcat-embed-websocket-8.0.28-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/hibernate\/hibernate-validator\/5.2.2.Final\/hibernate-validator-5.2.2.Final-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/com\/fasterxml\/jackson\/core\/jackson-annotations\/2.6.3\/jackson-annotations-2.6.3-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/com\/fasterxml\/jackson\/core\/jackson-core\/2.6.3\/jackson-core-2.6.3-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-aop\/4.2.3.RELEASE\/spring-aop-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-beans\/4.2.3.RELEASE\/spring-beans-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-context\/4.2.3.RELEASE\/spring-context-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/springframework\/spring-expression\/4.2.3.RELEASE\/spring-expression-4.2.3.RELEASE-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/objenesis\/objenesis\/2.1\/objenesis-2.1-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/ch\/qos\/logback\/logback-classic\/1.1.3\/logback-classic-1.1.3-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/slf4j\/jcl-over-slf4j\/1.7.13\/jcl-over-slf4j-1.7.13-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/slf4j\/jul-to-slf4j\/1.7.13\/jul-to-slf4j-1.7.13-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/slf4j\/log4j-over-slf4j\/1.7.13\/log4j-over-slf4j-1.7.13-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/javax\/validation\/validation-api\/1.1.0.Final\/validation-api-1.1.0.Final-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/jboss\/logging\/jboss-logging\/3.3.0.Final\/jboss-logging-3.3.0.Final-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/com\/fasterxml\/classmate\/1.1.0\/classmate-1.1.0-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/aopalliance\/aopalliance\/1.0\/aopalliance-1.0-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/ch\/qos\/logback\/logback-core\/1.1.3\/logback-core-1.1.3-sources.jar\r\nDownload https:\/\/jcenter.bintray.com\/org\/slf4j\/slf4j-api\/1.7.13\/slf4j-api-1.7.13-sources.jar\r\n:ideaProject\r\n:ideaWorkspace\r\n:idea\r\n\r\nBUILD SUCCESSFUL\r\n\r\nTotal time: 58.284 secs\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u5730\u65b9\u662f\u5bf9\u4e4b\u524d\u7684 Qiita \u6587\u7ae0\u7684\u5f15\u7528\uff0c\u6709\u5173 IDEA \u7684\u8bbe\u7f6e\u53ef\u4ee5\u5728\u300cBuild, Execution, Deployment\u300d&gt;\u300cCompiler\u300d\u7684\u300c\u81ea\u52a8\u6784\u5efa\u9879\u76ee\u300d\u9009\u9879\u4e0a\u52fe\u9009\uff0c\u7136\u540e\u518d\u6b21\u8fd0\u884c\u547d\u4ee4 .\/gradlew bootRun\u3002<\/p>\n<pre class=\"post-pre\"><code>2015-11-23 19:49:40.575  INFO 56854 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729\r\n2015-11-23 19:49:40.706  INFO 56854 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup\r\n2015-11-23 19:49:40.714  INFO 56854 --- [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)\r\n2015-11-23 19:49:40.716  INFO 56854 --- [  restartedMain] myproject.Application                    : Started Application in 1.015 seconds (JVM running for 54.864)\r\n2015-11-23 19:49:40.801  INFO 56854 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[\/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'\r\n2015-11-23 19:49:40.801  INFO 56854 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started\r\n2015-11-23 19:49:40.803  INFO 56854 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 2 ms\r\n&gt; Building 80% &gt; :bootRun\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u66f4\u6539 src\/main\/java\/**.java\uff0c\u4f1a\u91cd\u65b0\u542f\u52a8 Tomcat\uff0c\u8868\u73b0\u51fa\u6b63\u5728\u91cd\u65b0\u542f\u52a8\u7684\u72b6\u6001&#8230;<\/p>\n<pre class=\"post-pre\"><code>2015-11-23 19:50:15.605  INFO 56854 --- [      Thread-23] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3e05e4a6: startup date [Mon Nov 23 19:49:39 JST 2015]; root of context hierarchy\r\n2015-11-23 19:50:15.606  INFO 56854 --- [      Thread-23] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown\r\n\r\n  .   ____          _            __ _ _\r\n \/\\\\ \/ ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\r\n( ( )\\___ | '_ | '_| | '_ \\\/ _` | \\ \\ \\ \\\r\n \\\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\r\n  '  |____| .__|_| |_|_| |_\\__, | \/ \/ \/ \/\r\n =========|_|==============|___\/=\/_\/_\/_\/\r\n :: Spring Boot ::        (v1.3.0.RELEASE)\r\n\r\n2015-11-23 19:50:15.875  INFO 56854 --- [  restartedMain] myproject.Application                    : Starting Application on seratchs-MacBook-Pro.local with PID 56854 (\/Users\/seratch\/Documents\/github\/spring-boot-example\/build\/classes\/main started by seratch in \/Users\/seratch\/Documents\/github\/spring-boot-example)\r\n2015-11-23 19:50:15.875  INFO 56854 --- [  restartedMain] myproject.Application                    : No profiles are active\r\n2015-11-23 19:50:15.878  INFO 56854 --- [  restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@160bf3cd: startup date [Mon Nov 23 19:50:15 JST 2015]; root of context hierarchy\r\n2015-11-23 19:50:16.372  INFO 56854 --- [  restartedMain] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: 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]]\r\n2015-11-23 19:50:16.524  INFO 56854 --- [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)\r\n2015-11-23 19:50:16.527  INFO 56854 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service Tomcat\r\n2015-11-23 19:50:16.527  INFO 56854 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat\/8.0.28\r\n2015-11-23 19:50:16.534  INFO 56854 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[\/]       : Initializing Spring embedded WebApplicationContext\r\n2015-11-23 19:50:16.535  INFO 56854 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 657 ms\r\n2015-11-23 19:50:16.615  INFO 56854 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [\/]\r\n2015-11-23 19:50:16.617  INFO 56854 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [\/*]\r\n2015-11-23 19:50:16.624  INFO 56854 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [\/*]\r\n2015-11-23 19:50:16.624  INFO 56854 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'httpPutFormContentFilter' to: [\/*]\r\n2015-11-23 19:50:16.624  INFO 56854 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'requestContextFilter' to: [\/*]\r\n2015-11-23 19:50:16.682  INFO 56854 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@160bf3cd: startup date [Mon Nov 23 19:50:15 JST 2015]; root of context hierarchy\r\n2015-11-23 19:50:16.694  INFO 56854 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped \"{[\/]}\" onto java.lang.String myproject.web.HomeController.home()\r\n2015-11-23 19:50:16.696  INFO 56854 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped \"{[\/error]}\" onto public org.springframework.http.ResponseEntity&lt;java.util.Map&lt;java.lang.String, java.lang.Object&gt;&gt; org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)\r\n2015-11-23 19:50:16.697  INFO 56854 --- [  restartedMain] 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)\r\n2015-11-23 19:50:16.704  INFO 56854 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [\/webjars\/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]\r\n2015-11-23 19:50:16.704  INFO 56854 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [\/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]\r\n2015-11-23 19:50:16.722  INFO 56854 --- [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [\/**\/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]\r\n2015-11-23 19:50:16.738  INFO 56854 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729\r\n2015-11-23 19:50:16.794  INFO 56854 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup\r\n2015-11-23 19:50:16.808  INFO 56854 --- [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)\r\n2015-11-23 19:50:16.809  INFO 56854 --- [  restartedMain] myproject.Application                    : Started Application in 1.0 seconds (JVM running for 90.958)\r\n2015-11-23 19:50:17.098  INFO 56854 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[\/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'\r\n2015-11-23 19:50:17.098  INFO 56854 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started\r\n2015-11-23 19:50:17.101  INFO 56854 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 3 ms\r\n<\/code><\/pre>\n<p>\u5728Twitter\u4e0a\u5f97\u5230\u7684\u4fe1\u606f\u544a\u8bc9\u6211\uff0c\u8fd9\u4e0d\u662fSpring Loaded\uff0c\u800c\u662f\u7531spring-boot-devtools\u5bfc\u81f4\u7684\u884c\u4e3a\u3002<\/p>\n<blockquote><p>@seratch_ja @megascus \u8fd9\u662f\u4f7f\u7528\u5f00\u53d1\u5de5\u5177\u7684\u70ed\u52a0\u8f7d\u529f\u80fd\uff0c\u800c\u975eSpring Loaded\uff0c\u5bf9\u5417\uff1f\u2014 Toshiaki Maki (@making) 2015\u5e7411\u670823\u65e5<\/p><\/blockquote>\n<p>\u539f\u56e0\u53ea\u662f\u56e0\u4e3aSpring Loaded\u6ca1\u6709\u88ab\u6dfb\u52a0\u8fdb\u53bb\u5bfc\u81f4\u7684\u758f\u5ffd\u3002\u975e\u5e38\u62b1\u6b49\u7ed9\u60a8\u5e26\u6765\u56f0\u6270\uff08&amp; \u8c22\u8c22\u60a8\uff09\u3002<\/p>\n<p>\u56e0\u6b64\uff0c\u5728build.gradle\u7684buildscript.dependencies\u4e2d\u6dfb\u52a0&#8221;classpath\uff08&#8221;org.springframework\uff1aspringloaded\uff1a1.2.4.RELEASE&#8221;\uff09&#8221;\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">buildscript<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">repositories<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">mavenLocal<\/span><span class=\"o\">()<\/span>\r\n        <span class=\"n\">mavenCentral<\/span><span class=\"o\">()<\/span>\r\n    <span class=\"o\">}<\/span>\r\n    <span class=\"n\">dependencies<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">classpath<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"org.springframework.boot:spring-boot-gradle-plugin:1.3.0.RELEASE\"<\/span><span class=\"o\">)<\/span>\r\n        <span class=\"n\">classpath<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"org.springframework:springloaded:1.2.4.RELEASE\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u7981\u7528\u5728\u4f9d\u8d56\u9879\u4e2d\u7684 spring-boot-devtools\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">dependencies<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">compile<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"org.springframework.boot:spring-boot-starter-web\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"c1\">\/\/compile(\"org.springframework.boot:spring-boot-devtools\")<\/span>\r\n    <span class=\"n\">testCompile<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"org.springframework.boot:spring-boot-starter-test\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u7136\u540e\u4f7f\u7528 &#8220;.\/gradlew bootRun&#8221; \u547d\u4ee4\u91cd\u65b0\u542f\u52a8 Gradle\u3002<\/p>\n<p>\u7528\u8fd9\u79cd\u65b9\u5f0f\uff0c\u4f60\u53ef\u4ee5\u4fee\u6539 Java \u4ee3\u7801\u3001\u6dfb\u52a0\u6216\u79fb\u52a8\u7c7b\u7b49\u7b49\uff0c\u5e76\u4e14\u7a0d\u5fae\u6709\u4e9b\u5ef6\u8fdf\uff0c\u4f46\u53ef\u4ee5\u5b9e\u73b0\u70ed\u52a0\u8f7d\u800c\u65e0\u9700\u91cd\u65b0\u542f\u52a8\u3002\u975e\u5e38\u597d\u3002<\/p>\n<p>\u7136\u800c\uff0c\u4f3c\u4e4eRequestMapping\u548cSpring\u6ce8\u518c\u7684Bean\u4fe1\u606f\u4e0d\u4f1a\u8fdb\u884c\u70ed\u91cd\u8f7d\uff0c\u786e\u5b9e\u5728\u6211\u8bd5\u8fc7\u7684\u60c5\u51b5\u4e0b\u662f\u8fd9\u6837\u7684\u3002\u8fd9\u4e00\u70b9\u786e\u5b9e\u6709\u70b9\u4e0d\u65b9\u4fbf\u3002<\/p>\n<blockquote><p>@seratch_ja \u8fd9\u91cc\u6307\u7684\u662f\u63a7\u5236\u5668\u7684URL\u6620\u5c04\u548cbean\u5b9a\u4e49\u4e4b\u7c7b\u7684\u4e1c\u897f\u5462\u3002\u2014 \u03a3(\uff65\u03c9\uff65\uff89)\uff89\uff01 (@megascus) 2015\u5e7411\u670823\u65e5<\/p><\/blockquote>\n<p>\u4e4b\u540e\uff0c\u6211\u4e5f\u53c2\u8003\u4e86\u8fd9\u4e9b\u7f51\u5740\uff1a<br \/>\n<iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" title=\"Spring Boot 1.2\/1.3\u3067hot swapping\u7684\u306a\u3053\u3068 - teppeis blog\" src=\"https:\/\/hatenablog-parts.com\/embed?url=http%3A%2F%2Fteppeis.hatenablog.com%2Fentry%2F2015%2F11%2Fspring-boot-hot-swapping#?secret=4p8diAUDPK\" data-secret=\"4p8diAUDPK\" scrolling=\"no\" frameborder=\"0\"><\/iframe><br \/>\n<iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" title=\"Intellij IDEA + gradle\u3067spring loaded\u304c\u52d5\u304b\u306a\u3044\u554f\u984c - \u6587\u7cfb\u30d7\u30ed\u30b0\u30e9\u30de\u306b\u3088\u308bTIPS\u30d6\u30ed\u30b0\" src=\"https:\/\/hatenablog-parts.com\/embed?url=http%3A%2F%2Fwww.bunkei-programmer.net%2Fentry%2F2015%2F06%2F16%2F012524#?secret=N1rSuPFOYv\" data-secret=\"N1rSuPFOYv\" scrolling=\"no\" frameborder=\"0\"><\/iframe><\/p>\n<p>\u6211\u5728\u60f3\uff0c\u5f53Spring Loaded\u8fdb\u884c\u70ed\u90e8\u7f72\u65f6\uff0c\u662f\u5426\u4f1a\u8f93\u51fa\u4efb\u4f55\u65e5\u5fd7\uff1f\u4f60\u53ef\u4ee5\u53c2\u8003\u6b64\u94fe\u63a5\u83b7\u53d6\u66f4\u591a\u5173\u4e8eSpring Loaded\u7684\u57fa\u672c\u4f7f\u7528\u4fe1\u606f\uff1ahttps:\/\/github.com\/spring-projects\/spring-loaded\/wiki\/Basic-usage-information\u3002<\/p>\n<p>\u5728 build.gradle \u6587\u4ef6\u4e2d\u8fdb\u884c\u4ee5\u4e0b\u8bbe\u7f6e\u540e\uff0c\u65e5\u5fd7\u5f00\u59cb\u5927\u91cf\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">bootRun<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">systemProperty<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"springloaded\"<\/span><span class=\"o\">,<\/span> <span class=\"s2\">\"verbose;explain\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u68c0\u6d4b\u5230\u6587\u4ef6\u88ab\u66f4\u6539\u5e76\u7f16\u8bd1\u7ed3\u679c\u88ab\u8f93\u51fa\u65f6\uff0c\u4ee5\u4e0b\u7c7b\u578b\u7684\u65e5\u5fd7\u5c06\u663e\u793a\u5728\u6807\u51c6\u8f93\u51fa\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code>2015-11-24 12:56:48.262  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.agent.Watcher    : Observed last modification time change for \/Users\/k-sera\/Documents\/github\/spring-boot-example\/build\/classes\/main\/myproject\/web\/HomeController.class (lastScanTime=1448337407162)\r\n2015-11-24 12:56:48.262  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.agent.Watcher    : Firing file changed event \/Users\/k-sera\/Documents\/github\/spring-boot-example\/build\/classes\/main\/myproject\/web\/HomeController.class\r\n2015-11-24 12:56:48.263  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.ReloadableType   : Loading new version of myproject\/web\/HomeController, identifying suffix PUvM9u4, new data length is 593bytes\r\n2015-11-24 12:56:48.264  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/TypeDiffComputer classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.264  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/TypeDiffComputer is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.265  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/ClassNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.266  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/AnnotationNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.267  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/MethodNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.269  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/InsnList classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.270  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/LabelNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.270  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/AbstractInsnNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.271  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/LineNumberNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.271  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/VarInsnNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.272  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/MethodInsnNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.273  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/InsnNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.273  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/LocalVariableNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.274  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=sl\/org\/objectweb\/asm\/tree\/LdcInsnNode classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.275  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/TypeDelta classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.275  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/TypeDelta is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.276  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/MethodDelta classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.276  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/MethodDelta is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\nReloading: Loading new version of myproject.web.HomeController [PUvM9u4]\r\n2015-11-24 12:56:48.277  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/CurrentLiveVersion classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.277  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/CurrentLiveVersion is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.278  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/IncrementalTypeDescriptor classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.278  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/IncrementalTypeDescriptor is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.279  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/ExecutorBuilder$ExecutorBuilderVisitor classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.279  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/ExecutorBuilder$ExecutorBuilderVisitor is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.280  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/ExecutorBuilder$ExecutorBuilderVisitor$CopyingAnnotationVisitor classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.280  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/ExecutorBuilder$ExecutorBuilderVisitor$CopyingAnnotationVisitor is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.281  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/ConstructorCopier classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.281  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/ConstructorCopier is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.282  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/MethodCopier classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.282  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/MethodCopier is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.283  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/DispatcherBuilder classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.283  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/DispatcherBuilder is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.284  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/DispatcherBuilder$DispatcherBuilderVisitor classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.284  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/DispatcherBuilder$DispatcherBuilderVisitor is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.285  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=myproject\/web\/HomeController$$DPUvM9u4 classloader=ChildClassLoader typeRegistry=null\r\n2015-11-24 12:56:48.286  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springsource\/loaded\/__DynamicallyDispatchable classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.286  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springsource\/loaded\/__DynamicallyDispatchable is using a package name 'org\/springsource\/loaded\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.286  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=myproject\/web\/HomeController$$EPUvM9u4 classloader=ChildClassLoader typeRegistry=null\r\n2015-11-24 12:56:48.287  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=java\/io\/ObjectStreamClass$Caches classloader=null typeRegistry=null\r\n2015-11-24 12:56:48.287  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=com\/sun\/beans\/finder\/PropertyEditorFinder classloader=null typeRegistry=null\r\n2015-11-24 12:56:48.288  INFO 40741 --- [Loader@14dad5dc] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=org\/springframework\/util\/ConcurrentReferenceHashMap$2 classloader=Launcher$AppClassLoader typeRegistry=TypeRegistry(id=455659002,loader=sun.misc.Launcher$AppClassLoader)\r\n2015-11-24 12:56:48.288  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springframework\/util\/ConcurrentReferenceHashMap$2 is using a package name 'org\/springframework\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.288  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springframework\/util\/ConcurrentReferenceHashMap$2 is using a package name 'org\/springframework\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.289  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springframework\/util\/ConcurrentReferenceHashMap$Task is using a package name 'org\/springframework\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.289  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springframework\/util\/ConcurrentReferenceHashMap$Reference is using a package name 'org\/springframework\/' which is considered infrastructure and types within it are not made reloadable\r\n2015-11-24 12:56:48.289  INFO 40741 --- [Loader@14dad5dc] org.springsource.loaded.TypeRegistry     : WhyNotReloadable? The type org\/springframework\/util\/ConcurrentReferenceHashMap$Entry is using a package name 'org\/springframework\/' which is considered infrastructure and types within it are not made reloadable\r\n&gt; Building 80% &gt; :bootRun\r\n<\/code><\/pre>\n<p>\u7136\u800c\uff0c\u5f53\u8bbe\u7f6e\u6b64\u9009\u9879\u65f6\uff0c\u4e0d\u77e5\u4f55\u6545\u5f80\u5f80\u4f1a\u6709\u8f83\u9ad8\u7684\u6982\u7387\u4ee5 exit 1 \u5f02\u5e38\u9000\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>015-11-24 12:57:48.662  INFO 40758 --- [  DestroyJavaVM] o.s.l.agent.SpringLoadedPreProcessor     : SpringLoaded preprocessing: classname=java\/util\/IdentityHashMap$KeyIterator classloader=null typeRegistry=null\r\n:bootRun FAILED\r\n\r\nFAILURE: Build failed with an exception.\r\n\r\n* What went wrong:\r\nExecution failed for task ':bootRun'.\r\n&gt; Process 'command '\/Library\/Java\/JavaVirtualMachines\/jdk1.8.0_45.jdk\/Contents\/Home\/bin\/java'' finished with non-zero exit value 1\r\n\r\n* Try:\r\nRun with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.\r\n\r\nBUILD FAILED\r\n\r\nTotal time: 10.923 secs\r\n<\/code><\/pre>\n<p>\u987a\u4fbf\u8bf4\u4e00\u4e0b\uff0c\u5982\u679c\u4f7f\u7528.\/graldew bootRun &#8211;stacktrace\u547d\u4ee4\u8fd0\u884c\uff0c\u4f1a\u51fa\u73b0\u5982\u4e0b\u65e5\u5fd7\uff0c\u4f46\u4ec5\u51ed\u6b64\u65e0\u6cd5\u786e\u5b9a\u539f\u56e0\u3002<\/p>\n<pre class=\"post-pre\"><code>* Exception is:\r\norg.gradle.api.tasks.TaskExecutionException: Execution failed for task ':bootRun'.\r\n    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)\r\n    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)\r\n    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)\r\n    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)\r\n    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)\r\n    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)\r\n    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)\r\n    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)\r\n    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)\r\n    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)\r\n    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)\r\n    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)\r\n    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)\r\n    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)\r\n    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)\r\n    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)\r\n    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)\r\n    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)\r\n    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)\r\n    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)\r\n    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)\r\n    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)\r\n    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)\r\n    at org.gradle.internal.Factories$1.create(Factories.java:22)\r\n    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)\r\n    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)\r\n    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)\r\n    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)\r\n    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)\r\n    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)\r\n    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)\r\n    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)\r\n    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)\r\n    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)\r\n    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)\r\n    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)\r\n    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)\r\n    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)\r\n    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)\r\n    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:77)\r\n    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:47)\r\n    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)\r\n    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)\r\n    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)\r\n    at org.gradle.util.Swapper.swap(Swapper.java:38)\r\n    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)\r\n    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)\r\n    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)\r\n    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)\r\n    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)\r\n    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)\r\n    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)\r\n    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)\r\nCaused by: org.gradle.process.internal.ExecException: Process 'command '\/Library\/Java\/JavaVirtualMachines\/jdk1.8.0_45.jdk\/Contents\/Home\/bin\/java'' finished with non-zero exit value 1\r\n    at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:367)\r\n    at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:31)\r\n    at org.gradle.api.tasks.JavaExec.exec(JavaExec.java:75)\r\n    at org.springframework.boot.gradle.run.BootRunTask.exec(BootRunTask.java:63)\r\n    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)\r\n    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227)\r\n    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)\r\n    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)\r\n    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)\r\n    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)\r\n    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)\r\n    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)\r\n    ... 68 more\r\n<\/code><\/pre>\n<p>\u53ef\u80fd\u5df2\u7ecf\u6709\u4eba\u63d0\u51fa\u4e86\u8fd9\u4e2a\u95ee\u9898\u4f5c\u4e3a\u4e00\u4e2a\u5df2\u77e5\u7684\u4e8b\u4ef6\uff0c\u4f46\u603b\u4e4b\uff0cSpring Loaded\u73b0\u5728\u53ef\u4ee5\u4f7f\u7528\u4e86\u3002<\/p>\n<h2>\u5f00\u53d1\u5de5\u5177\u7684\u81ea\u52a8\u91cd\u542f<\/h2>\n<p>\u521a\u624d\u91cd\u542fTomcat\u662f\u7531\u4e8espring-boot-devtools\u7684\u64cd\u4f5c\u3002\u4ee5\u524d\u5728\u4ece\u6587\u6863\u7c98\u8d34\u7684build.gradle\u4e2d\u6709\u70b9\u4e0d\u660e\u786e\u5730\u542f\u7528\u4e86\u5b83\uff0c\u4f46\u662f\u4e0d\u77e5\u9053\u5b83\u5230\u5e95\u662f\u4ec0\u4e48\u3002\u66f4\u8fdb\u4e00\u6b65\u7684\u8bf4\u660e\u5728\u300c20. \u5f00\u53d1\u5de5\u5177\u300d\u4e2d\u63d0\u4f9b\u3002<\/p>\n<p>\u6839\u636e\u300c20.2 \u81ea\u52a8\u91cd\u542f\u300d\u4e2d\u6240\u8ff0\uff0c\u5982\u679c\u7c7b\u8def\u5f84\u4e0a\u7684\u6587\u4ef6\u53d1\u751f\u66f4\u6539\uff0cdevtools\u4f3c\u4e4e\u4f1a\u91cd\u65b0\u542f\u52a8Tomcat\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5b83\u4f1a\u68c0\u6d4b\u7c7b\u8def\u5f84\u4e0a\u6240\u6709\u8d44\u6e90\u7684\u66f4\u6539\u5e76\u8fdb\u884c\u91cd\u65b0\u542f\u52a8\u3002\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u6765\u66f4\u6539\u8fd9\u4e2a\u66f4\u6539\u68c0\u6d4b\u76ee\u6807\u3002<\/p>\n<p>devtools\u7684\u91cd\u65b0\u542f\u52a8\u673a\u5236\u5e76\u4e0d\u4ec5\u4ec5\u662f\u7b80\u5355\u5730\u91cd\u65b0\u542f\u52a8\u3002\u5b83\u4f7f\u7528\u4e86\u4e24\u4e2a\u7c7b\u52a0\u8f7d\u5668\uff0c\u5206\u522b\u662fbase\u548crestart\u3002\u5bf9\u4e8e\u90a3\u4e9b\u4e0d\u4f1a\u6539\u53d8\u7684\u7c7b\uff0c\u6bd4\u5982\u5b58\u5728\u4e8ejar\u6587\u4ef6\u4e2d\u7684\u7c7b\uff0c\u4f1a\u4f7f\u7528base\u52a0\u8f7d\u5668\u6765\u52a0\u8f7d\uff0c\u800c\u5bf9\u4e8e\u7ecf\u5e38\u53d1\u751f\u53d8\u5316\u7684\u7c7b\uff0c\u6bd4\u5982\u5728src\/main\/java\u4e0b\u7684\u7c7b\uff0c\u4f1a\u4f7f\u7528restart\u52a0\u8f7d\u5668\u6765\u52a0\u8f7d\u3002\u5f53\u91cd\u65b0\u542f\u52a8\u65f6\uff0c\u53ea\u9700\u8981\u91cd\u65b0\u521b\u5efa\u540d\u4e3arestart\u7684\u7c7b\u52a0\u8f7d\u5668\uff0c\u5c31\u80fd\u6bd4\u7b80\u5355\u5730\u91cd\u65b0\u542f\u52a8\u66f4\u5feb\u5730\u542f\u52a8\u3002<\/p>\n<p>\u5982\u679c\u4f60\u8ba4\u4e3a\u91cd\u542f\u4e0d\u5982\u91cd\u65b0\u52a0\u8f7d\u597d\u7684\u8bdd\uff0c\u90a3\u4e48\u9664\u4e86Spring Loaded\uff0c\u5efa\u8bae\u4f60\u4e5f\u8003\u8651\u4e00\u4e0bZeroTurnaround\u516c\u53f8\u7684JRebel\uff08\u8fd9\u4e2a\u6211\u5176\u5b9e\u8fd8\u6ca1\u7528\u8fc7\uff0c\u6240\u4ee5\u60f3\u627e\u673a\u4f1a\u8bd5\u8bd5\u770b\uff09\u3002<\/p>\n<h2>\u66ab\u6642\u5728\u9019\u9644\u8fd1\u505c\u4e0b\u4f86<\/h2>\n<p>\u56e0\u6b64\uff0c\u7531\u65bc\u6587\u7ae0\u8b8a\u5f97\u5f88\u9577\uff0c\u6211\u5011\u53ef\u4ee5\u8003\u616e\u5728\u9019\u88e1\u7d50\u675f\u9019\u7bc7\u6587\u7ae0\u3002<\/p>\n<p>\u6211\u8ba4\u4e3aSpring Boot\u7684\u597d\u5904\u5728\u4e8e\u53ef\u4ee5\u8f7b\u677e\u5730\u8fdb\u884c\u8bd5\u9a8c\u3002\u5982\u679c\u4f60\u6709\u4f7f\u7528\u8fc7Spring\u7684\u7ecf\u9a8c\uff0c\u5c31\u53ef\u4ee5\u60f3\u8c61\u51fa\u6ce8\u91ca\u662f\u505a\u4ec0\u4e48\u7684\uff0c\u800c\u4e14\u4e0d\u9700\u8981\u8d39\u529b\u5730\u8fdb\u884c\u521d\u59cb\u8bbe\u7f6e\uff0c\u8fd9\u771f\u662f\u975e\u5e38\u987a\u7545\u548c\u597d\u3002<\/p>\n<p>\u76ee\u524d\uff0c\u6211\u5bf9\u6d4b\u8bd5\u76f8\u5173\u3001Swagger\u5408\u4f5c\u548cOAuth2\u6709\u5174\u8da3\uff0c\u6240\u4ee5\u9996\u5148\u60f3\u5c1d\u8bd5\u4e00\u4e0b\u8fd9\u4e9b\u65b9\u9762\u3002\u53e6\u5916\uff0c\u6211\u4e5f\u60f3\u5c1d\u8bd5\u4e00\u4e0b\u7528Scala\u6765\u505a\u4e00\u4e9b\u9879\u76ee\uff0c\u867d\u7136\u6211\u7528Gradle\u7528\u7684\u662fGroovy\uff0c\u4f46\u4e5f\u8003\u8651\u8fc7\u7528Groovy\u5c1d\u8bd5\u4e00\u4e0b\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u867d\u7136\u6211\u6709\u4e00\u4e9b\u4f7f\u7528Spring\u7684\u7ecf\u9a8c\uff0c\u4f46\u6211\u4ece\u672a\u771f\u6b63\u63a5\u89e6\u8fc7Spring Boot\u3002\u8fd9\u662f\u6211\u7b2c\u4e00\u6b21\u5c1d\u8bd5\u4f7f\u7528Spring [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40448","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-\u5165\u95e8\u7b14\u8bb0\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0\" \/>\n<meta property=\"og:description\" content=\"\u867d\u7136\u6211\u6709\u4e00\u4e9b\u4f7f\u7528Spring\u7684\u7ecf\u9a8c\uff0c\u4f46\u6211\u4ece\u672a\u771f\u6b63\u63a5\u89e6\u8fc7Spring Boot\u3002\u8fd9\u662f\u6211\u7b2c\u4e00\u6b21\u5c1d\u8bd5\u4f7f\u7528Spring [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-\u5165\u95e8\u7b14\u8bb0\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-12T19:03:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-15T02:37:07+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"36 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/\",\"name\":\"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-09-12T19:03:30+00:00\",\"dateModified\":\"2024-01-15T02:37:07+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-\u5165\u95e8\u7b14\u8bb0\/","og_locale":"zh_CN","og_type":"article","og_title":"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0","og_description":"\u867d\u7136\u6211\u6709\u4e00\u4e9b\u4f7f\u7528Spring\u7684\u7ecf\u9a8c\uff0c\u4f46\u6211\u4ece\u672a\u771f\u6b63\u63a5\u89e6\u8fc7Spring Boot\u3002\u8fd9\u662f\u6211\u7b2c\u4e00\u6b21\u5c1d\u8bd5\u4f7f\u7528Spring [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-\u5165\u95e8\u7b14\u8bb0\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-09-12T19:03:30+00:00","article_modified_time":"2024-01-15T02:37:07+00:00","author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"36 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/","name":"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-09-12T19:03:30+00:00","dateModified":"2024-01-15T02:37:07+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Boot 1.3.0 \u5165\u95e8\u7b14\u8bb0"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/spring-boot-1-3-0-%e5%85%a5%e9%97%a8%e7%ac%94%e8%ae%b0\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=40448"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40448\/revisions"}],"predecessor-version":[{"id":58688,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40448\/revisions\/58688"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=40448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=40448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=40448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}