Статьи

Ява не сосет

Недавно Джеймс Уорд написал замечательное сообщение в блоге  «Java не сосет — вы просто неправильно его используете» , в котором освещены многочисленные проблемы, с которыми сталкиваются корпоративные Java-разработчики в своей повседневной рутинной работе по созданию Java-приложений. Хорошей новостью является то, что вырваться из рутины разработки гораздо проще, чем вы думаете. За последние несколько лет Spring пересмотрел, как создаются современные Java-приложения, значительно улучшив при этом скорость разработки. В этом посте я буду использовать пост в блоге Джеймса Уорда в качестве фона, чтобы объяснить, как Spring помогает разработчикам качать JVM (используя Java), решая при этом все проблемы, изложенные Джеймсом.

руководств по началу работы на spring.io. Для разработчиков, впервые знакомых с Spring Boot, отличной отправной точкой является руководство по  созданию приложения с помощью Spring Boot  .

другого . Поддержка Spring Boot переменных среды делает следование  лучшим рекомендациям по настройке приложений из двенадцати факторов  (строгое отделение кода от конфигурации) очень просто.

Совет 1. При использовании облачных платформ, таких как Cloud Foundry, приложения Spring Boot могут использовать  Spring Cloud Connectors  для автоматической привязки к сервисам Cloud Foundry, таким как базы данных и системы обмена сообщениями. Преимущество этого заключается в уменьшении количества свойств конфигурации, специфичных для среды, которые необходимо поддерживать приложению, что значительно снижает риск возникновения ошибок при продвижении кода между средами.

Совет 2: Любопытно, почему приложения с двенадцатью факторами имеют значение? Прочтите этот пост в блоге,  Почему 12-факторные шаблоны приложений, микросервисы и CloudFoundry Matter .

начальными POMS . Начальные POM предоставляют группы зависимостей для общих рабочих нагрузок разработки, которые вы можете просто включить в свое приложение.

Чтобы начать работу с Spring Boot, вы можете указать свой браузер на Spring Initializer — http://start.spring.io . Spring Initializer предоставляет веб-интерфейс, позволяющий разработчикам выбирать приложение / рабочую нагрузку и соответствующие зависимости. Затем он сгенерирует начальное приложение с поддержкой сборки (поддерживает Maven POM, проект Maven, Gradle Config, проект Gradle).

Снимок экрана Spring Initializer:
Spring Initializer

Разработчик, предпочитающий командную строку, может установить CLI Spring Boot, выполнив:

curl http://start.spring.io/install.sh | sh

Новый проект можно инициализировать с помощью командной строки, просто выполнив следующую команду:

spring init --dependencies=web,data-jpa my-project

Результатом этой инициализации (через Spring Initializer или Boot CLI) является полностью работоспособное приложение, в котором необходимые зависимости были включены и автоматически настроены Spring Boot.

Платформа  Spring IO  (которая включает Spring Boot) также предоставляет расширенный набор зависимостей, управляемых начальными POM Spring Boot. Spring IO устанавливает уровни зависимостей в портфеле Spring и имеет более длительный цикл выпуска, чем Spring Boot, предоставляя предприятиям моментальный снимок версий зависимостей, которые были протестированы и, как известно, работают вместе. Дистрибутив Spring IO Platform не является монолитной загрузкой библиотек, и разработчики могут выбирать только те части, которые им необходимы в их приложении. Дистрибутив Spring IO Platform содержит версии модулей Spring, библиотек тестирования, каркасов журналирования, управления базами данных, SQL / No-SQL и многое другое. Распределение Spring IO идеально подходит для предприятий, которые хотят использовать зависимости Spring IO Platform с более постепенным темпом.

Следующая конфигурация Gradle демонстрирует, как настроить спецификацию Spring IO Platform и использовать веб-стартер POM Spring Boot:

buildscript {
    repositories {
        jcenter()}
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:0.3.0.RELEASE'}}

apply plugin:'io.spring.dependency-management'

repositories {
    mavenCentral()}

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:1.1.0.RELEASE'}}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'}

Spring Boot и JRebel 6  с Джошом Лонгом и Адамом Кобленцем для получения более подробной информации.

блоге .

При создании распределенных приложений (включая приложения в стиле микросервисов) появляется много общих системных шаблонов. Spring Cloud упрощает принятие этих шаблонов, предоставляя готовые сервисы для решения наиболее распространенных проблем. В Spring Cloud реализованы такие шаблоны, как управление конфигурацией, обнаружение служб, автоматический выключатель, интеллектуальная маршрутизация, микропрокси и шина управления. Spring Boot упрощает интеграцию этих возможностей в ваше приложение.

Например, проект Spring Cloud Netflix делает создание службы обнаружения сервисов с помощью Eureka Netflix так же просто, как:

@SpringBootApplication 
@EnableEurekaServer

public class Application {
    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

Клиентские приложения могут зарегистрироваться как клиент Eureka, просто используя @EnableEurekaClient:

@SpringBootApplication
@EnableEurekaClient
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

Совет 1: Spring Cloud обеспечивает поддержку многочисленных шаблонов распределенной обработки. Чтобы начать работу, ознакомьтесь с   репозиторием github Spring Cloud Samples . Сессии Spring Cloud, Spring Boot и Netflix OSS  SpringOne, проведенные Дейвом Сайером и Спенсером Гиббом,  — еще один отличный способ понять и научиться внедрять архитектуры микросервисного стиля.

Совет 2: Если вы хотите создавать API-интерфейсы REST в стиле Hypermedia, обязательно ознакомьтесь с Руководством по началу работы,  Доступ к данным JPA с помощью RESTSpring Data REST  поможет ускорить развитие вашего сервиса. Spring Data REST поддерживает репозитории SQL и No-SQL.

Наличие технологии, позволяющей быстро кодировать микросервисы, — это только полдела. Разработчики часто страдают от многочисленных задержек в переносе их кода на рабочие платформы. Некоторые из наиболее распространенных препятствий включают развертывание вручную, тестирование, предоставление инфраструктуры и предоставление услуг. Непрерывная доставка направлена ​​на автоматизацию процесса продвижения кода в производство при минимизации рисков. Это позволяет организациям вносить постепенные изменения в приложения, делая развертывание бизнес-решением, а не ресурсным решением. Сама по себе это довольно большая тема, но я настоятельно рекомендую выступление Мэтта Стайна «  Разработка микросервисов для PaaS с использованием Spring и Cloud Foundry». который отлично справляется с задачей, подчеркивая преимущества сочетания гибких методов проектирования с автоматизацией Pivotal Cloud Foundry.

прошел GA , поэтому попробуйте  примеры Spring Session,  чтобы увидеть все это в действии. Дейв Сайер недавно опубликовал пост в блоге под названием  «Шаблон шлюза API: Angular JS и Spring Security Part IV» , в котором подробно описывается вариант использования общего состояния аутентификации. Настоятельно рекомендуется к прочтению!

Наконец, если вы используете Pivotal Cloud Foundry, пакет сборки Java Cloud Foundry предоставляет еще один вариант, позволяющий легко экстернализовать состояние через автоматически настроенное хранилище состояний сеанса CF. Проверьте это  сообщение в блоге  для деталей.

спецификации Reactive Streams,  которая открывает интеграцию с другими реализациями Reactive Streams, такими как  Akka StreamsRatpackRxJava .

В следующем фрагменте кода показано, как использовать API Reactive Streams для создания потока, добавления к нему бизнес-логики и публикации в нем данных:

// by default Streams use the Disruptor RingBufferDispatcher
Broadcaster<String> helloStream = Streams.broadcast(env);

helloStream.map(s -> "Hello " + s + "!")
           .consume(log::info);

helloStream.onNext("World");

Совет: Spring Boot обеспечивает поддержку проекта Reactor, что упрощает его начало. Следуйте  инструкциям в Руководстве по началу работы с асинхронным, управляемым событиями приложением с Reactor, чтобы создать первое реактивное приложение. Также обязательно посетите вебинар «  Использование Reactor для Asynch», неблокирующие микросервисы .

В Spring Framework 4 появилась поддержка приложений, управляемых событиями, в стиле WebSocket. Этот прагматический подход выходит далеко за рамки JSR-356 и включает в себя опции отката на стороне клиента с SockJS, поддержку подпротокола обмена сообщениями (STOMP), безопасность (Spring Security 4), поддержку посредника сообщений, основанный на Reactor MessageChannel для передачи сообщений, обработку разъединения клиента и знакомая модель программирования Spring.

Совет: Spring Boot делает настройку приложений WebSocket несложной. Следуйте указаниям раздела Использование WebSocket для создания интерактивного руководства  по веб-приложениям .

Функциональное программирование на Java: использование возможностей Java 8 Lambda Expressions»  и его  выступление на SpringOne2GX 2014

Руководства по началу работы Spring  и развернуть их на  Pivotal Web Services  (общедоступная, размещенная версия Cloud Foundry, которая бесплатна в течение 60 дней).