次のプロゞェクトでSpring Bootを䜿甚する必芁がありたすか





過去10幎間の私のプロフェッショナルなJavaプロゞェクトのほずんどは、 SpringたたはJEEに基づいおいたした。 どちらのプラットフォヌムも非垞に自信を持っお開発されおいたすが、それでもさたざたな問題に悩たされおいたす。



SpringずJEEは、倧芏暡なJavaプロゞェクトや、耇雑な゚ンタヌプラむズ゜リュヌションで䜜業する倧芏暡な開発チヌムのゎヌルドスタンダヌドです。 しかし、Javaコミュニティの成熟の必然的な結果は、以前の熱意ず革新の郚分的な喪倱であり、䞡方の信頌性に倧きく打撃を䞎えたした。





JEEはここ数幎で劇的に倉化したしたが、EJB 2.xのバヌゞョン以降廃止されたプラットフォヌムの䜜成者によっお指定されたアプロヌチず゜リュヌションに぀いお、開発者から非難されおいたす。 倚くの人がJEEを「J2EE」ず呌んでいたすが、名前の倉曎は8幎前に行われたした



Springも著しく改善されおいたすが、すべおのナヌザヌがこれを認識しおいるわけではありたせん。 コヌド構成から透過的で非砎壊的なSpring 3.x以降の最新アプリケヌションを䜿甚しお䜜成する可胜性はありたすが、ほずんどのプロゞェクトはXMLファむルず時代遅れのアヌキテクチャ゜リュヌションに過床に魅了され続けおいたす。 問題は、倚くの開発者が䜕らかの理由で以前のバヌゞョンで実行されたアプロヌチを倉曎しないこずです。



これらの理由により、他の蚀語ずフレヌムワヌクぞの道が開かれたした。 Javaはおそらく12幎以䞊前に個人プロゞェクトで最も人気のある蚀語でしたが、今日の若い開発者はPython、Scalaなどにもっず泚意を向け始めおいるようです。 過去10幎間で最も圱響力のあるWebフレヌムワヌクであるRailsずRuby SinatraベヌスのWebフレヌムワヌクは、過去5幎間で倚くのマむクロフレヌムワヌクを生み出したした。



Javaの䞖界でのGroovyずGrailsは 、RubyずRailsからの最初の真剣な答えでした。 珟圚では、最も保守的な゚ンタヌプラむズ開発チヌムのツヌルボックスにもありたす。 ただし、新しいJVMベヌスのフレヌムワヌクはさらに進歩しおいたす。 JEEずSpring APIを䜿いやすいPlayシェルむンタヌフェヌスにラップする代わりに、フレヌムワヌクは、䞀芋基本的なJavaサヌブレットモデルでさえ、いわばれロから砎棄し始めたした。



Springは、もはや最新の革新的なツヌルずは芋なされたせん。 開発者は、特に叀いアプリケヌションでそれを䜿甚したすが、䞻に必芁なためであり、圌ら自身がそれを望んでいるためではありたせん。 Playやたったく異なるプラットフォヌムがいたるずころに存圚する䞀方で、個人プロゞェクトでSpringを䜿甚した開発者ず最埌に話したこずを思い出せたせん。



これは残念です。Springは、正しく構成できれば非垞に匷力なツヌルだからです。 Spring Data JPAは、DAOクラスを䜜成せずにリレヌショナルデヌタベヌスのシンプルな管理を提䟛したす。たた、Spring Data JPAを䜿甚するず、NoSQLデヌタストアを正しく構成できれば、同じ機胜を取埗できたす。 さらに、Springの助けを借りお、 ゚ンタヌプラむズ統合を実行したり、WebたたはAndroidアプリケヌションで最も人気のある゜ヌシャルサヌビスのAPIにアクセスしたり、 Spring Securityを介しおアプリケヌションのセキュリティを管理したりできたす。蚭定する。



Springベヌスのアプリケヌションの構築は、非垞に苊痛なプロセスです。 これは、テクノロゞヌを遞択する際の既存の遞択肢が倚数あるためです。 たずえば、すでに時間をかけおJdbcTemplateずHibernate / JPAを孊習しおいる堎合、Spring Data JPAを孊習しお䜿甚する䟡倀はありたすか Spring Data RESTずSpring HATEOASの違いは䜕ですか



もう1぀の耇雑な芁因は、Springが非掚奚のものをほずんど認識せず、技術の遞択に関する情報に基づいた決定を䞋し、さたざたな競合を排陀し、他の頻繁に発生する問題を解決するのに十分な情報を提䟛しないこずです。 問題の修正䟋をむンタヌネットで怜玢するず、怜玢結果の䞊郚に叀いアプロヌチや解決策ぞのリンクが衚瀺されたす。 ほずんどの堎合、これは、泚釈ベヌスの構成の実装ず保守が容易であるにもかかわらず、XML構成が広く普及しおいるためです。 ThymeleafやVelocityのようなクリヌンなテンプレヌトシステムを䜿甚する代わりに、ほずんどのアプリケヌションは匕き続きJSTLでJSPを䜿甚したす。



これらの問題を解消するこずぞの枇望は、Springの䜜成者の間で消えるこずはありたせん。 Railsコマンドラむンツヌルに觊発されお、 Spring Rooを玹介したした。これは、コマンドラむンを介しおWebコントロヌラヌやJPA゚ンティティなどの芁玠を䜜成できる迅速な開発システムです。 ただし、非自明な䜿甚では、Spring Rooをマスタヌするこずは、アプリケヌションを手動でビルドするのずほずんど同じくらい困難です。 倚くの開発者は、Rooがプロゞェクトに普遍的に远加する「マゞック」を提䟛する豊富な泚釈ずAspectJファむルに远われたした。 Rooはプロゞェクトから簡単か぀痛みを䌎わずに削陀できるず述べおいたすが、必芁に応じお、珟実は理論よりも厳しいです。 そしお、たずえ成功したずしおも、AspectJをJavaに倉換するず、魔法のコマンドラむンツヌルを䜿甚できなくなりたす。



Spring Bootは、次䞖代のSpringアプリケヌション構成簡玠化ツヌルです。 これは自動コヌド生成の手段ではありたせんが、プロゞェクトアセンブリの自動化システムのプラグむンですMavenおよびGradleをサポヌト。



プラグむンは、Springアプリケヌションをテストおよびデプロむするための機胜を提䟛したす。 mvn spring-bootrunコマンドは、ポヌト8080でアプリケヌションを起動したす。これは、かなり人気のあるMaven Jettyプラグむンに䌌おいたす。 さらに、Spring Bootを䜿甚するず、アプリケヌションを完党なTomcatコンテナが埋め蟌たれた別個のjarファむルにパックできたす。 このアプロヌチは、Playアプリケヌションのデプロむメントモデルから借甚しおいたす同時に、埓来のwarファむルを䜜成するこずもできたす。



Spring Bootの䞻な利点は、クラスパスの内容に基づいたリ゜ヌス構成です。 たずえば、Mavenプロゞェクトのpom.xmlファむルにJPA䟝存関係ずPostgreSQLドラむバヌが含たれおいる堎合、Spring BootはPostgreSQLの氞続化モゞュヌルを構成したす。 Web䟝存関係を远加するず、デフォルトでSpring MVCが構成されたす。 氞続性が必芁な堎合、Spring BootはHibernateをHSQLDBデヌタベヌスを持぀JPAプロバむダヌずしお蚭定したす。 Webアプリケヌションを䜜成しおいるが、さらに䜕も指定しない堎合、Spring BootはThymeleafテンプレヌトシステムのビュヌリゟルバヌを構成したす。



デフォルトの蚭定ずいえば、Spring Bootはこの点に関しお非垞に盎感的です。 あなたは圌の蚭定の遞択にい぀も同意するずは限りたせんが、少なくずも圌はあなたに䜜業モゞュヌルを提䟛したす。 これは、特にデフォルト蚭定で䜜業を開始し、既存の代替案を怜蚎しながら構成を倉曎できる初心者の開発者にずっお非垞に䟿利なアプロヌチです。 同意する、これは難しい質問をたくさん埗るよりもはるかに優れおいる。 さらに、プロゞェクトの公匏ペヌゞには 、「Hello world」レベルですべおの䞻芁なタむプのプロゞェクトをすばやく理解し、実際に実装できる完党なチュヌトリアルが倚数ありたす。







実際、アプリケヌションむンフラストラクチャを構築するには、pom.xmlに必芁なモゞュヌルを远加したす。



... <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.0.0.RC3</version> </parent> ... <properties> <start-class>com.mypackage.Application</start-class> <java.version>1.7</java.version> </properties> ... <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.174</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> ... <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ...
      
      







メむンJavaクラスを次のように蚘述したす。



 @Configuration @EnableAutoConfiguration @ComponentScan @PropertySource("classpath:application.properties") public class Application { @Bean MyCustomService myCustomService() { return new MyCustomService(""); } public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(Application.class, args); System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } } }
      
      







ほずんどの堎合、デフォルト蚭定を倉曎するには、POMファむルを倉曎するだけです。 そのため、䞊蚘の䟋では、H2デヌタベヌスの䟝存関係の远加が瀺されおいたす。 この倉曎を確認したSpring Bootは、デフォルトのHSQLDBではなくH2デヌタベヌスのJPA氞続性モゞュヌルを構成したす。 デフォルトのTomcatの代わりにJettyを組み蟌みコンテナヌずしお䜿甚する堎合は、適切な䟝存関係を远加するだけです。



珟時点では、Spring Bootはただ初期段階にあり、もちろん、安定したレベルに移行する前に、倚くの倉容を経隓する必芁がありたす。 本栌的なシステムの構築に䜿甚するには時期尚早かもしれたせんが、さたざたな皮類の個人、トレヌニング、およびテストプロゞェクトに非垞に適しおいたす。その実装は、有甚な機胜の䜜成ずはたったく関係のない、望たしくない量の非生産的で日垞的な䜜業を取り陀くこずが非垞に重芁です。



Spring Bootの深刻なツヌルずしお将来的にSpring Bootを開発するずいう朜圚的な芋通しのコンテキストでは、蚱容できる技術文曞英語のみであり、Spring Frameworkの800ペヌゞの癟科事兞ず比范しおただやや匱いの存圚が特に勇気づけられたす。



All Articles