小编Vin*_*ino的帖子

SpringBoot - BeanDefinitionOverrideException:无效的bean定义

我正在尝试使用Spring Boot在本地设置DynamoDB.最初我使设置工作,并能够通过存储库写入/保存到DynamoDB.从那时起,我添加了更多类来构建我的应用程序.现在当我尝试启动我的应用程序时,我得到以下异常:

org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'agentRepository' defined in null: Cannot register bean definition [Root bean: class [org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'agentRepository': There is already [Root bean: class [org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.

我已经广泛搜索了SO和互联网,但没有任何有用的解决方案.错误消息也具有误导性.

我的项目具有以下层次结构

ai.test.as
  - as
      - agent
          - business
          - intent
          - exception
          - Agent.java
          - AgentDTO.java
          - AgentRespository.java
          - AgentController.java
          - AgentService.java
          - AgentServiceImpl.java
  - config …
Run Code Online (Sandbox Code Playgroud)

java spring amazon-dynamodb spring-bean spring-boot

28
推荐指数
2
解决办法
2万
查看次数

领域驱动设计 - 领域模型与 Hibernate 实体

Hibernate 实体是否与域模型相同?

请参阅以下示例。

方法 1 - 域模型和实体是同一个类。域模型“是一个”实体

@Entity
@Table(name = "agent")
class Agent
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "agent_number", unique = true, nullable = false)
    private String agentNumber;

    @Column(name = "agent_name", nullable = false)
    private String agentName;

    // Busines logic methods
}
Run Code Online (Sandbox Code Playgroud)

方法 2 - 域和实体是不同的功能。域模型“有一个”实体

class Agent
{
    // Hibernate entity for this domain model
    private AgentEntity agentEntity;

    // Getters and setters to set the agentEntity attributes

    // Business logic
}
Run Code Online (Sandbox Code Playgroud)

从以上2种方法中,哪一种是实现DDD的正确方法?我相信方法 …

entity domain-driven-design hibernate

13
推荐指数
2
解决办法
3432
查看次数

使用openssl和python签名数据

我目前正在使用下一个opensll命令签署数据:

openssl dgst -sign key.pem -sha256 -out signature.sig data.txt
Run Code Online (Sandbox Code Playgroud)

我怎样才能用Python实现这一目标?

python openssl cryptography

6
推荐指数
1
解决办法
8051
查看次数

如何模拟 Python 类的对象?

假设我是以下课程;

class CompositionClass(object):
    def __init__(self):
        self._redis = Redis()
        self._binance_client = BinanceClient()

    def do_processing(self, data):
        self._redis.write(data)
        self._binance_client.buy(data.amount_to_buy)

        # logic to actually unittest

        return process_val
Run Code Online (Sandbox Code Playgroud)

我有其他对象调用外部 API 作为我的ComplexClass. 当我对 的逻辑进行单元测试时do_processing,我不想调用这些昂贵的 API 调用。我已经在 SO 和 Google 中彻底检查了单元测试;所有的例子都很简单,并不是很有用。在我的情况下,我如何使用unittest.mock来模拟这些对象?

mocking python-3.x python-unittest

6
推荐指数
1
解决办法
5131
查看次数

服务层是否应该接受来自控制器的DTO或自定义请求对象?

顾名思义,设计服务层时的最佳实践是什么?我确实知道服务层应始终返回DTO,以便将域(实体)对象保留在服务层内。但是,控制器对服务层的输入应该是什么?

我在下面提出了三个建议:

方法1:在这种方法中,域对象(项)保留在服务层中。

class Controller
{
    @Autowired
    private ItemService service;

    public ItemDTO createItem(IntemDTO dto)
    {
        // service layer returns a DTO object and accepts a DTO object
        return service.createItem(dto);
    }
}
Run Code Online (Sandbox Code Playgroud)

方法2:这是服务层接收自定义请求对象的地方。我已经在AWS Java SDK和Google Cloud Java API中广泛地看到了这种模式

class Controller
{
    @Autowired
    private ItemService service;

    public ItemDTO createItem(CreateItemRequest request)
    {
        // service layer returns a DTO object and accepts a custom request object
        return service.createItem(request);
    }
}
Run Code Online (Sandbox Code Playgroud)

方法3:服务层接受DTO并返回域对象。我不喜欢这种方法。但是它已在我的工作场所中广泛使用。

class Controller
{
    @Autowired
    private ItemService service;

    public ItemDTO createItem(CreateItemRequest request)
    {
        // …
Run Code Online (Sandbox Code Playgroud)

rest dto service-layer

6
推荐指数
2
解决办法
1560
查看次数

将Protobuf与Gradle(IntelliJ)结合使用

我正在尝试使用此处给出的构建指令为一个简单的protobuf 示例生成代码。我已经尝试了一段时间,但在源根目录中看不到任何自动生成的代码。

以下是我的build.gradle档案

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath "io.spring.gradle:dependency-management-plugin:1.0.3.RELEASE"
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.google.protobuf'

group = 'io.ai.vivid'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencyManagement {
    imports {
        mavenBom 'com.amazonaws:aws-java-sdk-bom:1.11.228'
    }
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.5.1-1"
    }

    generateProtoTasks.generatedFilesBaseDir = 'generated-sources'

    plugins …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea protocol-buffers gradle

5
推荐指数
1
解决办法
2942
查看次数

最佳实践:如何使用 Terraform 通过 CI 创建自定义 MySQL (RDS) 用户?

我目前已在 VPC 的私有子网中创建了一个 RDS 实例。现在我想创建一个具有一些权限和授权的用户。为此,我使用TF 中的mysql_usermysql_grants资源类型。由于我的实例位于私有子网中,因此 TF 代码无法作为 CI 管道的一部分执行来创建 Mysql 用户和授权。

据我了解,我有两个选择:

  1. 不要对用户和授权进行地形改造。而是通过堡垒主机登录 RDS 实例并手动创建用户。

  2. 在公有子网(db子网和公有子网)中创建RDS实例。然后使用 TF 创建用户并授予权限。修改数据库实例并将其移动到私有子网。

我更倾向于不做。2 因为一切都是代码并且可重复。但想知道是否有更好的方法来实现这一目标。

mysql amazon-web-services amazon-rds terraform

5
推荐指数
1
解决办法
3078
查看次数

最佳实践:使用Java 8可选或引发异常

Java 8引入了OptionalAPI来表示可能null在运行时使用的值。在以下情况下,是否最好抛出一个已检查的异常或返回一个Optional返回类型来表示边缘情况?

情况1:返回类型 Optional

private Optional<Item> getItem(String itemName)
{
    for (Item item : items)
    {
        if (item.getName().equals(itemName))
            return Optional.of(item);
    }

    return Optional.empty();
}
Run Code Online (Sandbox Code Playgroud)

情况2:引发检查异常

  private Item getItem(String itemName) throws ItemNotFound
   {
        for (Item item : items)
        {
            if (item.getName().equals(itemName))
                return item;
        }

        throw new ItemNotFound();
   }
Run Code Online (Sandbox Code Playgroud)

正如Martin Fowler所主张的那样,Optional/特殊情况模式是一种更好的做法,但是在这种简单的情况下,抛出一个受检查的异常也可以做到。

我应该关注哪一个?

java exception optional

3
推荐指数
1
解决办法
424
查看次数

在 AWS VPC 中创建多个子网时出错

我正在尝试在 AWS 中创建具有多个子网的 VPC。我很确定我已经掌握了 CIDR 的概念来屏蔽网络和可用主机。

不幸的是,每当我尝试设计 VPC 时,我都会遇到错误。这是我的 VPC 设计:

  • 专有网络:10.0.0.0/16
  • 公有子网 1:10.0.1.0/16

错误:

必须是有效的 CIDR 块。你是说 10.0.0.0/16 吗?

然后由于错误,我将我的公共子网分配为 10.0.0.0/16。

然后我继续将我的专用网络创建为 10.0.1.0/16 - 我收到一个错误:

CIDR 块 10.0.1.0/16 与预先存在的 CIDR 块 10.0.0.0/16 重叠

我究竟做错了什么?我只想创建两个专用网络和一个公共网络。

amazon-web-services amazon-vpc

2
推荐指数
1
解决办法
1615
查看次数

使用 SpringBoot 设置 DynamoDB

我正在尝试使用 SpringBoot 设置本地 DynamoDB 实例。我正在关注这个,但是使用 Gradle。

当我尝试运行我的应用程序时,出现以下异常:

BeanCreationException: Error creating bean with name 'agentRepository': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)

我确实知道这是由于歧义而导致依赖注入失败,但我 AgentRepository作为无参数构造函数。不知道哪里有歧义。

以下是我的代码:

摇篮文件

buildscript {
    ext {
        springBootVersion = '2.1.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'test.project'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
    maven { …
Run Code Online (Sandbox Code Playgroud)

java amazon-dynamodb spring-boot

2
推荐指数
1
解决办法
5603
查看次数