小编Jag*_*ags的帖子

从Gradle自动装配BuildProperties bean - NoSuchBeanDefinitionException

我试图从Gradle构建文件中获取Java应用程序中的版本.我按照这里的指示行事;

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-build.html

的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-
        plugin:1.5.7.RELEASE")
    }
}

project.version = '0.1.0'

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

springBoot  {
    buildInfo()
}

jar {
    baseName = 'ci-backend'
}

war {
   baseName = 'ci-backend'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework:spring-jdbc")
    compile("joda-time:joda-time")

    compile("com.opencsv:opencsv:3.9")
    compile("org.springframework.batch:spring-batch-core")

    testCompile('org.springframework.boot:spring-boot-starter-test')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
 }
Run Code Online (Sandbox Code Playgroud)

使用gradle构建后,该build-info.properties文件存在于build/resources/main/META-INF/build-info.properties中

在我,@RestController我试图自动装配构建属性bean

@Autowired
private BuildProperties buildProperties;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误;

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: …
Run Code Online (Sandbox Code Playgroud)

spring autowired gradle spring-boot

17
推荐指数
4
解决办法
7448
查看次数

通过环境变量指定@CrossOrigin 起源

是否可以@CrossOrigin通过环境变量指定Annotation的来源?我想这样做,以便我可以对 uat/staging/production 使用相同的代码库。我希望我的 uat/staging 环境可以通过 localhost 访问以进行测试,但我的生产环境只接受来自一个特定端点的请求。

例如,这是我们新 API 的跨源注释用户;

@CrossOrigin(origins = {"http://localhost:9000", "http://example.com"})
Run Code Online (Sandbox Code Playgroud)

这工作正常。在我的本地机器上测试,只有在端口 9000 上运行的网络服务器才能访问我的 API。然后我尝试在我的本地 Windows 机器上设置我的环境变量

ALLOWED_ORIGINS = http://localhost:9000,http://example.com
Run Code Online (Sandbox Code Playgroud)

然后我也更改了注释

@CrossOrigin(origins = "#{'${allowed.origins}'.split(',')}")
Run Code Online (Sandbox Code Playgroud)

现在请求由于 CORS 被阻止。

作为后续问题。我可以将端口设置为通配符吗?以便任何本地主机网络服务器都可以访问 API?

更新

所以我能够通过 - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-support来实现我问题的第一部分

并设置 env 变量 allowedOrigins()

@Value("#{'${allowed.origins}'.split(',')}")
private List<String> allowedOrigins;
Run Code Online (Sandbox Code Playgroud)

然而,对于我的生活,我似乎无法获得任何形式的通配符/模式匹配。我已经尝试了以下两种环境变量;

http://localhost:*
http:\/\/localhost:[0-9]+
Run Code Online (Sandbox Code Playgroud)

我可能不得不将此作为一个单独的问题提出。

java spring environment-variables spring-annotations cors

8
推荐指数
1
解决办法
2964
查看次数