小编Ste*_*una的帖子

如何将Mongodb Atlas连接到Spring

我有一个使用 Spring Boot 来处理后端逻辑的 Web 应用程序。我正在尝试集成 mongodb 来跟踪有关此网络应用程序用户的一些信息。我在 mongodb Atlas 上创建了一个数据库,并通过 Mongo Shell 连接正常。当我尝试连接 Spring 时,问题就出现了。让我向您展示所有细节

在 Atlas 内部,我将此 IP 地址(0.0.0.0/0(包括您当前的 IP 地址))添加到安全 > 网络地址中。理论上,这应该允许我从任何 IP 地址连接到数据库。

然后我创建了一个名为“test”的集合。

如果我单击我的集群,然后单击连接按钮,它会询问我要使用哪种方式进行连接。我选择“连接您的应用程序”,然后必须选择驱动程序和版本。我分别选择“Java”和“3.6或更高版本”(我不确定它是否是正确的版本,替代方案是3.4或3.3)。最后它向我显示了连接字符串:

mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority
Run Code Online (Sandbox Code Playgroud)

要使用 Spring 连接到 Atlas,我正在使用此依赖项

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在 application.properties 文件中,我有这两行来配置 mongo。

spring.data.mongodb.host=mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority
spring.data.mongodb.port=27017
Run Code Online (Sandbox Code Playgroud)

出于明显的原因,我没有输入密码。

唯一的问题是,当我启动 Spring Boot 时,我继续收到此错误消息:

2020-02-25 16:31:25.605  INFO 41162 --- [=majority:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority:27017

com.mongodb.MongoSocketException: mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority: nodename nor servname provided, or not known
    at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:188) ~[mongo-java-driver-3.6.4.jar:na]
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59) …
Run Code Online (Sandbox Code Playgroud)

mongodb spring-boot mongodb-atlas

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

@Transactional 服务方法回滚休眠更改

我在 @Service 类中有一个方法,它在两个不同的 @Service 类中调用两个不同的方法。这两种不同的方法在数据库中保存两个实体(通过休眠),它们都可能抛出一些异常。我希望如果抛出异常,独立于哪个 @Service 方法,所有更改都会回滚。所以在数据库中创建的所有实体都被删除了。

//entities
@Entity
public class ObjectB{
   @Id
   private long id;
   ...
}

@Entity
public class ObjectC{
   @Id
   private long id;
   ...
}



//servicies
@Service
@Transactional
public class ClassA{

   @Autowired
   private ClassB classB;

   @Autowired
   private ClassC classC;

   public void methodA(){
      classB.insertB(new ObjectB());
      classC.insertC(new ObjectC());
   }
}

@Service
@Transactional
public class ClassB{

   @Autowired
   private RepositoryB repositoryB;

   public void insertB(ObjectB b){
      repositoryB.save(b);
   }
}

@Service
@Transactional
public class ClassC{

   @Autowired
   private RepositoryC repositoryC;

   public void insertC(ObjectC c){ …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate spring-boot

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

在GoLang中,slice2:= slice1是否等于slice2:= slice1 [:]?

以下两行代码是否在GoLang中执行相同的操作?我想要做的是将一个切片复制到另一个切片:

slice1 := make([]int, 5)
slice2 := slice1 #line1
slice2 := slice1[:] #line2
Run Code Online (Sandbox Code Playgroud)

我运行此代码来测试行为,但显然它们都以相同的方式工作:

func main() {
    s1 := make([]int, 5, 5)
    s1[2] = 33
    fmt.Printf("s1: %v: address of slice %p\n", s1, &s1)
    s2 := s1[:]
    s2[1] = 5
    fmt.Printf("s2: %v: address of slice %p\n", s2, &s2)
    s3 := s1
    s3[0] = 23
    fmt.Printf("s3: %v: address of slice %p\n",s3, &s3)
    fmt.Printf("s2: %v: address of slice %p\n", s2, &s2)
    fmt.Printf("s1: %v: address of slice %p\n", s1, &s1)
}
Run Code Online (Sandbox Code Playgroud)

输出是:

s1: [0 …
Run Code Online (Sandbox Code Playgroud)

go slice

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

标签 统计

spring-boot ×2

go ×1

hibernate ×1

java ×1

mongodb ×1

mongodb-atlas ×1

slice ×1

spring ×1