我的数据库连接是用下面的类处理的:
public class DB {
private final Datastore datastore;
private Morphia morphia;
/**
* Constructor for creating database instance
*/
public DB() {
morphia = new Morphia();
morphia.mapPackage("users");
datastore =
morphia.createDatastore(new MongoClient(), "test");
datastore.ensureIndexes();
}
/**
* Inserts given user to the database
*
* @param u a newly created user.
*/
public void addUser(User u) {
datastore.save(u);
}
/**
* Fetches and prints all documents in database
*
* @return json array of all documents in database
*/
public String getUsers() {
final Query<User> query = datastore.createQuery(User.class);
final List<User> employees = query.asList();
return objToJson(employees);
}
/**
* Returns the user with the specified ID.
*
* @param userID is the ID of the document in database
* @return document in json format
*/
public String getUser(ObjectId userID) {
final Query<User> query = datastore.createQuery(User.class)
.field("id").equal(userID);
final List<User> employees = query.asList();
return objToJson(employees);
}
/**
* Deletes the document with the given ID from database.
*
* @param userID is the ID of the document to be removed
*/
public void removeUser(ObjectId userID) {
final Query<User> query = datastore.createQuery(User.class)
.field("id").equal(userID);
datastore.delete(query);
}
/**
* Deletes all documents from database.
*/
public void removeUsers() {
final Query<User> query = datastore.createQuery(User.class);
datastore.delete(query);
}
/**
* Updates the fields of the document with given ID.
*
* @param userID is the ID of the document to be updated
* @param newUser contains the new fields
* @return results of the update in json format
*/
public String updateUser(ObjectId userID, User newUser) {
final Query<User> query = datastore.createQuery(User.class)
.field("id").equal(userID);
final UpdateOperations<User> updateOperations = datastore.createUpdateOperations(User.class);
if (newUser.getFirst_name() != null) {
String newName = newUser.getFirst_name();
updateOperations.set("first_name", newName);
}
if (newUser.getLast_name() != null) {
String newLastName = newUser.getLast_name();
updateOperations.set("last_name", newLastName);
}
if (newUser.getSalary() != 0) {
int newSalary = newUser.getSalary();
updateOperations.set("salary", newSalary);
}
final UpdateResults results = datastore.update(query, updateOperations);
return results.toString();
}
/**
* Translate object lists to the json array.
*
* @param query is the list of the user objects
* @return json array of the given users
*/
private String objToJson(List<User> query) {
List<String> attsToRemove = Arrays.asList(new String[]{"className"});
List<DBObject> dbObjList = new ArrayList<>(query.size());
DBObject dbObj;
for (Object obj : query) {
dbObj = morphia.toDBObject(obj);
for (int i = 0; i < attsToRemove.size(); i++) {
dbObj.removeField(attsToRemove.get(i));
}
dbObjList.add(dbObj);
}
String json = JSON.serialize(dbObjList);
return json;
}
这是我的spring boot控制器
@RestController
public class DemoController {
DB mongodb = new DB();
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "Greetings from Spring Boot";
}
@RequestMapping(value = "/users/{user_id}", method = RequestMethod.GET)
public String getUser(@PathVariable("user_id") ObjectId userID) {
return mongodb.getUser(userID);
}
@RequestMapping(value = "/users", method = RequestMethod.GET)
public String getUsers() {
return mongodb.getUsers();
}
@RequestMapping(value = "/users", method = RequestMethod.POST)
public void createUser(@RequestBody User u) {
try {
mongodb.addUser(u);
} catch (Exception e) {
System.out.println(e.toString());
}
}
@RequestMapping(value = "/users", method = RequestMethod.DELETE)
public void deleteUsers() {
try {
mongodb.removeUsers();
} catch (Exception e) {
System.out.println(e.toString());
}
}
@RequestMapping(value = "/users/{user-id}", method = RequestMethod.DELETE)
public void deleteUser(@PathVariable("user-id") ObjectId userID) {
try {
mongodb.removeUser(userID);
} catch (Exception e) {
System.out.println(e.toString());
}
}
@RequestMapping(value = "/users/{user-id}", method = RequestMethod.PUT)
public String updateUser(@PathVariable("user-id") ObjectId userID, @RequestBody User u) {
return mongodb.updateUser(userID, u);
}
下面是我的dockerfile:frolvlad/alpine-oraclejdk8:slim VOLUME/tmp ADD demo-0.0.1-snapshot.jar app.jar EXPOSE 27017 EXPOSE 8080 RUN sh-c'touch/app.jar'ENV java_opts=“”ENTRYPOINT[“sh”,“-c”,“java$java_opts-djava.security.egd=file://dev/./urandom-jar/app.jar”]
我读了这里和这里提到的解决方案。也阅读了一些教程,但我无法将这些解决方案中的任何一个适合我的代码。在我的代码中,我应该在哪里更改?
主要问题是您的容器不在同一个网络中。我想你可以找到一个在Docker Containe中如何运行Spring Boot和MongoDB的工作示例。下面是一个简短的摘录:
docker network create spring_demo_net
create a networkdocker run--name spring-demo-mongo--network=spring_demo_net-v/home/ubuntu/mongo-data://data/db-d mongo
start a mongo容器spring.data.mongodb.uri=mongoDB://spring-demo-mongo/your_db
这里,spring-demo-mongo是在步骤1中创建的容器的名称。由于您没有使用SpringData存储库,它将无法工作,因此您需要通过显式传递主机和端口来创建MongoClient:
MongoClient mongoClient2 = new MongoClient("spring-demo-mongo", 27017);
我有zipkin服务器作为Spring Boot应用程序运行。我已经将jar导出到docker容器。 我已经探索过这个环节。
问题内容: 我正在使用docker- compose 运行一个应用程序。一切正常,通过连接到容器内的Mongo,我可以看到所有数据。但是,当我连接到RoboMongo时,我看不到任何数据。 我该如何解决这个问题? 问题答案: 您应该在Docker容器内建立到MongoDB的Robomongo SSH隧道连接。首先,您应该在docker容器中安装一个ssh服务器。 https://docs.dock
我有一些docker conatiner,现在我想用ssh进入一个。我通过ssh连接到了docker容器。 但是现在我有一个问题,我不知道我可以用哪个用户访问这个容器? 我在主机(web)上的两个用户中都尝试过
我正试图从PHP容器连接到容器化的MySQL数据库,虽然同一网络上的所有容器都是如此,但问题是,当我点击
问题内容: 计划 我希望我的tomcat服务器能够在单独的容器中连接到我的MySQL服务器。 问题 Tomcat无法连接到MySQL 我使用了wordpress教程中的一些详细信息,这些信息涉及与mysql容器建立链接并创建指向MySQL的链接。 尽管tomcat和mysql旋转得很好,但我似乎无法使tomcat能够连接到MySQL,但是这些设置在我的本地计算机上也可以正常运行。 我也尝试使用它,
作为解决Hibernate OGM连接问题的一部分,我想看看我是否从Robo 3T连接。 我构建我的MongoDB映像并开始运行。 docker ps: MacBook-Pro:GoStopHandle NOTiFY$docker ps容器ID图像 命令创建状态端口名称0375a68b9988 goStop handlemongob:最新 "docker-entrypoint. s..."5秒前上