我运行一个通过springboot应用程序的静态资源托管的VueJs应用程序。
到目前为止,我通过以下方式成功处理外部配置。
我创建静态externalConf.js我…
根据环境进行一些配置的正确方法是使用具有自己配置的不同环境构建捆绑包 Webpack DefinePlugin 。
Webpack DefinePlugin
在您的示例中,您有以下Webpack配置:
{ ... plugins: [ new webpack.DefinePlugin({ isProd: process.env.NODE_ENV === 'production', }, ], ... }
而且只是你的 public/js/externalizedConf.js 将会:
public/js/externalizedConf.js
export default { FRONT_API_URL: isProd ? 'https://production.api' : 'http://dev.api', }
你可以阅读更多相关信息 Webpack DefinePlugin 。
此外,Vue CLI 3引入了新方法 通过Vue应用程序定义和使用环境变量 。
我不知道这是不是你的情况,但是spring-cloud-config有一个不错的功能。看到 这里 。也 这个 配置应该对你有所帮助。
的 编辑: 强>
也许更简单的解决方案是:
import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.thymeleaf.spring5.SpringTemplateEngine; import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; import org.thymeleaf.spring5.view.ThymeleafViewResolver; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ITemplateResolver; @SpringBootApplication public class SpringTemplateApplication { public static void main(String[] args) { SpringApplication.run(SpringTemplateApplication.class, args); } @Configuration public class WebMvcConfiguration implements WebMvcConfigurer, ApplicationContextAware { private ApplicationContext applicationContext; @Override public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Bean public ViewResolver javascriptViewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); resolver.setContentType("application/javascript"); resolver.setCharacterEncoding("UTF-8"); resolver.setViewNames(new String[] {"*.js"}); return resolver; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.addTemplateResolver(javascriptTemplateResolver()); return engine; } public ITemplateResolver javascriptTemplateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setApplicationContext(applicationContext); resolver.setOrder(1); resolver.setCheckExistence(true); resolver.setPrefix("classpath:/static/js/"); resolver.setCacheable(false); resolver.setTemplateMode(TemplateMode.JAVASCRIPT); return resolver; } } @Controller public static class JavascriptController { @Value("${VUE_APP_FRONT_API_URL:NOTDEFINED!!!}") private String vueApiUrl; @GetMapping(value = "/js/{file}", produces = "text/javascript") public String getJavascript(@PathVariable("file") final String file, final Model model) { model.addAttribute("VUE_APP_FRONT_API_URL", vueApiUrl); return file; } } }
在你的 resources/static/js 把文件 externalizedConf.js 内容
resources/static/js
externalizedConf.js
config = { VUE_APP_FRONT_API_URL : [(${VUE_APP_FRONT_API_URL})] }
和 pom.xml 依赖
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.demo</groupId> <artifactId>spring-template</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-template</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </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> </project>
当你访问网址时 http://host:port/js/externalizedConf.js 你应该获得替换占位符的内容。当然你可以使用spring 型材 为不同的环境/配置文件配置不同的属性值。
http://host:port/js/externalizedConf.js