标签: spring-boot

Cloud SQL 代理和权限不足

我正在尝试在 Google 的容器引擎 (GKE) 上部署我的 Spring Boot/JHipster 应用程序。我已经弄清楚了大部分事情,但是我的数据库实例(一个在 Google Cloud SQL 上运行的 PostgreSQL 实例,带有 Google SQL 代理)有问题。

我已按照此处此处的说明设置我的应用程序。

  1. 我已经在云中设置了我的 PostreSQL 实例,并创建了我的应用程序的数据库和用户。
  2. 我创建了一个具有 Cloud SQL 客户端角色的 SQL 服务——我获取了 JSON 密钥,并用它来创建我的 cloudsql-instance-credentials。我还创建了我的 cloudsql-db-credentials。
  3. 我已将其他位添加到我的部署 yaml 文件中。我基本上从这个 GitHub 示例中克隆了 yaml 文件,并用我自己的 Docker 镜像(托管在 Google Container Registry 中)替换了对 wordpress 的所有引用。我还更新了代理块,如下所示:

deployment.yaml 片段:

  - image: gcr.io/cloudsql-docker/gce-proxy:1.09
      name: cloudsql-proxy
          command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                    "-instances=[my-project]:us-central1:[my-sql-instance-id]=tcp:5432",
                    "-credential_file=/secrets/cloudsql/credentials.json"]
Run Code Online (Sandbox Code Playgroud)

最后,我更新了我的 Spring Boot 配置 yaml 文件,如下所示:

datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:postgresql://google/[my-database]?socketFactory=com.google.cloud.sql.postgres.SocketFactory&socketFactoryArg=[my-project]:us-central1:[my-sql-instance-id]
    username: ${DB_USER}
    password: ${DB_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

当 …

java google-cloud-sql spring-boot kubernetes google-kubernetes-engine

4
推荐指数
1
解决办法
2049
查看次数

Hibernate Spatial PostGis PSQLException 列的类型为 point 但表达式的类型为 bytea

在 Spring Boot 项目 Java8 中,使用 hibernate-spatial 和 PostgresDB 9.4

    <dependency> 
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-spatial</artifactId>
        <version>5.2.10.Final</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

应用程序属性

spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.spatial.dialect.postgis.PostgisPG94Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.postgis.PostgisPG94Dialect
Run Code Online (Sandbox Code Playgroud)

(我也试过 PostgisPG9Dialect)

我的实体有一个财产

...
import com.vividsolutions.jts.geom.Point;
....
@Column(columnDefinition = "Point")
private Point cityLocation;
Run Code Online (Sandbox Code Playgroud)

如果我用空值保存就可以了,但是如果我输入一个值

setCityLocation(new GeometryFactory().createPoint(new Coordinate(lng, lat));
Run Code Online (Sandbox Code Playgroud)

我有:

PSQLException: ERROR: column "city_location" is of type point but expression is of type bytea  You will need to rewrite or cast the expression.
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,我可以看到列定义为

type: point
column size: 2147483647
data type: 1111
num prec radix:     10
char octet length: 2147483647
Run Code Online (Sandbox Code Playgroud)

我快疯了...为什么它不起作用?

更新(它仍然不起作用,我正在收集新信息) …

postgis point java-8 hibernate-spatial spring-boot

4
推荐指数
1
解决办法
2487
查看次数

访问内部微服务

我有两个不同的微服务,使用 eureka 作为服务注册表,现在我试图从另一个调用微服务,使用功能区解析端点以进行客户端负载平衡。

服务一:

这个服务暴露了一个端点,http://localhost:15000/api/user/{userId},application.yml 如下,

# Spring properties
spring:
  application:
    name: user_microservice
  cloud:
    config:
      discovery:
        enabled: false

# HTTP Server
server:
  port: 15000  # HTTP (Tomcat) port



# Discovery Server Access
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    instanceId: ${spring.application.name}:${random.int}
    metadataMap:
      instanceId: ${spring.application.name}:${random.int}

logging:
  level:
    com.netflix.discovery: 'OFF'
    org.springframework.cloud: 'DEBUG'
Run Code Online (Sandbox Code Playgroud)

调用服务 A 的服务 B 具有以下应用程序类:

@EnableDiscoveryClient
@SpringBootApplication
public class UserSummaryApplication {

    public static void main(String[] args) {

        SpringApplication.run(UserSummaryApplication.class, args);
    }

    @Bean(name = "restTemplate")
    RestTemplate restTemplate() {
        return new RestTemplate(); …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot netflix-eureka netflix-ribbon

4
推荐指数
1
解决办法
2204
查看次数

Spring Boot 连接到 mysql docker

我已经启动了mysqldocker 镜像。

来自docker ps

bcb0a900b693 mysql:latest "docker-entrypoint..." 5 hours ago Up About an hour 0.0.0.0:3306->3306/tcp chrisbolton

我创建了一个基本spring boot项目,在其中创建了一个简单的类。

@SpringBootApplication
@RestController
public class ChrisboltonServiceApplication {

public static void main(String[] args) {
    SpringApplication.run(ChrisboltonServiceApplication.class, args);
}

@Autowired
private JdbcTemplate jdbcTemplate;

@RequestMapping("/hello")
public String sayHello(){
    return "Hello";
}

@RequestMapping(path="/blogs")
public @ResponseBody Iterable<ChrisBolton> getAllUsers() {
    List<ChrisBolton> result = jdbcTemplate.query(
            "SELECT * FROM blog",
            (rs, rowNum) -> new ChrisBolton(rs.getString("author"), 
                                               rs.getString("title"), 
                                               rs.getString("content"), 
                                               rs.getDate("date"))
    );

    return result;
}
Run Code Online (Sandbox Code Playgroud)

}

我已经把我的配置放在我的 application.properties

spring.main.banner-mode=off …
Run Code Online (Sandbox Code Playgroud)

java mysql database-connection spring-boot

4
推荐指数
1
解决办法
1万
查看次数

反序列化错误 spring boot 反应式

我有一个简单的控制器

@RestController
@RequestMapping("path")
public class MyController {

    @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Flux<SomeObject> run(@RequestBody Flux<RequestObject> request){

        //do something and return flux
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

在调用此网址时,我收到异常

"Type definition error: [simple type, class reactor.core.publisher.Flux]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Can not construct instance of reactor.core.publisher.Flux (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information\n at [Source: (PushbackInputStream); line: 1, column: 1]
Run Code Online (Sandbox Code Playgroud)

我理解这个错误,通常,如果需要,我只会添加一个注释

@JsonDeserialize(as = SomeConcreteClass.class)

但是在这种情况下,我应该绑定到哪个 …

spring reactor jackson spring-boot spring-webflux

4
推荐指数
1
解决办法
3114
查看次数

从 xml 配置中读取 spring yml 属性

我正在尝试从 spring-bean.xml 中的 application.yml 读取属性,如下所示:

<bean name="#{bean.name}" />
Run Code Online (Sandbox Code Playgroud)

是否可以 ?或者我应该指定我的 application.yml 文件的位置?

spring spring-boot

4
推荐指数
1
解决办法
5696
查看次数

Spring Cloud Zuul API 网关不会为无状态会话转发 JWT 令牌

我正在尝试使用Spring Boot 1.5.6.RELEASESpring Cloud Dalston.SR3来实现微服务架构后端,它们将由移动/Web 端点使用。

API网关应用

@SpringBootApplicatio
@EnableEurekaClient
@EnableZuulProxy
public class GatewayApplication {

    public static void main(String[] args) {
         SpringApplication.run(GatewayApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

接口安全

@Configuration
@EnableWebSecurity
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
@EnableOAuth2Sso
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {

        // @formatter:off
        http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
                .authorizeRequests()
                    .antMatchers("/sign-up", "/login")
                        .permitAll()
                .anyRequest()
                    .authenticated()
            .and()
                .csrf()
                    .ignoringAntMatchers("/sign-up", "/login")
                    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
        // @formatter:on
    }
}
Run Code Online (Sandbox Code Playgroud)

Gradle 安全相关的依赖项

   // Spring OAuth2 security
    compile("org.springframework.boot:spring-boot-starter-security")
    compile("org.springframework.security.oauth:spring-security-oauth2")
    compile("org.springframework.cloud:spring-cloud-starter-oauth2")
    compile("org.springframework.security:spring-security-jwt")
Run Code Online (Sandbox Code Playgroud)

祖尔路线

zuul: …
Run Code Online (Sandbox Code Playgroud)

spring-boot spring-security-oauth2 netflix-zuul spring-cloud-netflix

4
推荐指数
1
解决办法
6811
查看次数

Spring Boot 退出代码生成器 - 实现不起作用

我意识到在 SO 上有几个关于这个主题的类似未解决的问题,但是,我在 GitHub 上包含了一个可克隆的 MCVE,因此很容易重现问题场景。

设想

我正在尝试根据 Spring Boot文档实现一个 Spring Boot 退出代码生成器。看起来 Spring Boot 正在调用退出代码生成器,但应用程序以代码 0 退出,而不是给定的退出代码。我错过了什么?

@SpringBootApplication
@Configuration
@Slf4j
class App implements CommandLineRunner {

    @Autowired ConfigurableApplicationContext ctx

    static void main(String[] args) {
        SpringApplication.run(App.class, args)
    }

    @Override
    void run(String... args) throws Exception {
        SpringApplication.exit(ctx, new ExitCodeGenerator() {
            @Override
            int getExitCode() {
                log.info 'retrieving exit code.'
                return -1
            }
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Users\pc\IdeaProjects\spring-exit-code-gen>gradlew bootRepackage

C:\Users\pc\IdeaProjects\spring-exit-code-gen>java -jar build/libs/spring-exit-code-gen-1-0.0.1-SNAPSHOT.jar

2017-09-13 12:26:53.819  INFO 2832 --- [ …
Run Code Online (Sandbox Code Playgroud)

java groovy spring-boot

4
推荐指数
1
解决办法
3353
查看次数

Spring Boot:应用程序属性中的上下文路径给出错误

我已经在我的 application.properties 中设置了上下文路径,但是在运行 spring boot 应用程序时,我收到了一个错误,例如:-
ContextPath must start with '/' and not end with '/'

这是代码:-

演示应用程序:-

package com.ravat.demo;

import com.ravat.controller.DemoController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@ComponentScan(basePackages = "com.ravat.controller")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

演示控制器.java

package com.ravat.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @RequestMapping("/index")
    public String root(){
        return "Index Page";
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序属性:

server.port = 8085
server.context-path="/myApp"
Run Code Online (Sandbox Code Playgroud)

但是在服务器启动时我收到一个错误:-

Error starting ApplicationContext. …
Run Code Online (Sandbox Code Playgroud)

spring spring-boot

4
推荐指数
2
解决办法
6711
查看次数

测试时排除 ApplicationStartup 事件侦听器

我最近在 SpringBoot 项目中添加了一个 ApplicationStartup 类

@Component
public class ApplicationStartup
    implements ApplicationListener<ApplicationReadyEvent> { ...
Run Code Online (Sandbox Code Playgroud)

它实现了 ApplicationListener。

现在,当我运行与该类无关的旧 JUNit 测试时,testrunner 尝试运行我的 StartupListener,这在这些情况下既不必要也不合适。

我的测试初始化​​时如何跳过 ApplicationListener?

@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...
Run Code Online (Sandbox Code Playgroud)

java junit spring-boot spring-boot-test springrunner

4
推荐指数
2
解决办法
5277
查看次数