/*
* Copyright 2012-2013 the original author or authors.
*
* 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 com.kodcu.boot;
import com.kodcu.controller.ApplicationController;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.autoconfigure.web.*;
import org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import javax.script.ScriptEngine;
import java.util.Base64;
@Configuration
@EnableWebSocket
@ComponentScan(basePackages = "com.kodcu.**")
//@EnableAutoConfiguration
@Import({
DispatcherServletAutoConfiguration.class,
EmbeddedServletContainerAutoConfiguration.class,
// ErrorMvcAutoConfiguration.class,
HttpEncodingAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class,
// JacksonAutoConfiguration.class,
// JmxAutoConfiguration.class,
// MultipartAutoConfiguration.class,
ServerPropertiesAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class,
// ThymeleafAutoConfiguration.class,
WebMvcAutoConfiguration.class,
WebSocketAutoConfiguration.class,
})
public class SpringAppConfig extends SpringBootServletInitializer implements WebSocketConfigurer {
@Autowired
private ApplicationController applicationController;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(applicationController, "/ws", "/ws**", "/ws/**").withSockJS();
}
@Bean
@Lazy
public NashornScriptEngineFactory nashornScriptEngineFactory() {
NashornScriptEngineFactory nashornScriptEngineFactory = new NashornScriptEngineFactory();
return nashornScriptEngineFactory;
}
@Bean
@Scope("prototype")
@Lazy
public ScriptEngine scriptEngine() {
ScriptEngine scriptEngine = nashornScriptEngineFactory()
.getScriptEngine();
// .getScriptEngine(new String[]{"--persistent-code-cache", "--class-cache-size=50"});
return scriptEngine;
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringAppConfig.class);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public Base64.Encoder base64Encoder() {
return Base64.getEncoder();
}
}