Java tutorial
/* * Copyright 2016 Jorge Caldas, Jos Cortez * Jos Francisco, Marcelo Gonalves * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.github.proxyprint.kitchen; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import io.github.proxyprint.kitchen.utils.NotificationManager; import io.github.proxyprint.kitchen.utils.gson.AnnotationExclusionStrategy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.io.IOException; import org.springframework.scheduling.annotation.EnableAsync; @Configuration @EnableAutoConfiguration @ComponentScan @EnableCaching @EnableSwagger2 @EnableAsync public class WebAppConfig extends SpringBootServletInitializer { private static final Class<WebAppConfig> APP_CLASS = WebAppConfig.class; @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(APP_CLASS); } public static void main(String[] args) throws IOException { SpringApplication.run(APP_CLASS, args); } @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer container) { Integer port; try { port = Integer.valueOf(System.getenv("PORT")); } catch (NumberFormatException ex) { port = 8080; } container.setPort(port); } }; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // you USUALLY want this config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("GET"); config.addAllowedMethod("POST"); config.addAllowedMethod("DELETE"); config.addAllowedMethod("PUT"); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } @Bean public Gson gson() { return new GsonBuilder().setExclusionStrategies(new AnnotationExclusionStrategy()).create(); } @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()).build(); } @Bean public NotificationManager notificationSubscriptions() { return new NotificationManager(); } }