Problem As a part of my investigation of what docker is, I want to do a simple and useful thing - deploy my application in a completely convenient manner. Let’s say, I’m using Digital Ocean as a cloud provider. Because my application is too little to think about complex deployment infrastructure, I’d like to be able to deploy everything from my laptop using digitalocean token. Solution I’ll try to deploy everything using docker-machine, together with digitalocean cloud provider. I’ll describe in step by step how to do this. Setup a new digitalocean token. Go to cloud.digitalocean.com/settings/api/tokens and generate a new token Then, got your token, and execute following commands to export your instructions for further commands. You will understand why do we need them later. export DIGITALOCEAN_ACCESS_TOKEN=${newly-generated-token} export DIGITALOCEAN_PRIVATE_NETWORKING=true export DIGITALOCEAN_IMAGE=debian-8-x64 Create new machine As simple, as it can be - I’ll create a new digitalocean instance. Open your terminal, and type following command. docker-machine create \ -d digitalocean \ my-application Few explanations, -d digitalocean means, that you will use digitalocean for deployment. Out of the box, digitalocean will use exports, that we set some minutes ago. While we’re waiting till our console end up deploying to docker, let’s open...
Integration tests…they are perfect for testing your data flows. You send some request to your application and can control how data is being processed throughout your application. You see how request is received by your controller, then it’s sent to service, dao or other layers, that you have in your application. Sometimes you don’t want some layer to do real work in Spring. For instance, your dao layer is using some native queries to get data from database, and some embedded database doesn’t support some query syntax. Naturally, you still want to have your integration tests, but without a real call to database. What can we do in this situation ? I’d suggest to mock this dao layer, using mockito. Let’s demonstrate how it works ? ######Project setup I use Spring Initialzr to setup projects, so let’s create a simple Spring Boot application. Code can be found here. ######Project structure ├── README.md ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── spring-integration-mockito.iml └── src ├── main │ ├── java │ │ └── org │ │ └── springmockito │ │ └── demo │ │ ├── DemoApplication.java │ │ ├── ExampleDao.java │ │ ...
For those of you who worked with spring application without spring boot, and remembers those times, when you had to make your configuration using xml - did you ever question yourself how the magic is done ? For instance, if you had to create a component scan, you had to do <context:component-scan base-package="com.yourpackage.blablabla" /> how it really did this component scan ? ######spring.handlers Answer is simple - if you really would like to know how context or any other spring namespace is working - always start from spring.handlers file. It’s present in each spring jar file, which have some namespaces. The more spring dependencies you add - the more spring.handlers files you will have In case of spring-context jar, you will have something like this http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler http\://www.springframework.org/schema/jee=org.springframework.ejb.config.JeeNamespaceHandler http\://www.springframework.org/schema/lang=org.springframework.scripting.config.LangNamespaceHandler http\://www.springframework.org/schema/task=org.springframework.scheduling.config.TaskNamespaceHandler http\://www.springframework.org/schema/cache=org.springframework.cache.config.CacheNamespaceHandler So, let’s choose component-scan attribute. ######component-scan component-scan is an attribute of context namespace, so, we need ContextNamespaceHandler /* * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law...
######Embeddable When I was a bit younger, I couldn’t understand why more senior engineers stood for embedding builds as much as it’s possible. For instance, you have a database, and you’re running your integration tests only with in memory databases. It was very unusual for me, why having a working database on your local machine, you’re using some weird in memory things ? The time have passed, and I understand now, that embedding your builds is a good practice, because: It reduce your build time It decouples your build phase from any environments Even if you don’t have any database/thirdparty tool installed on your local machine, your build will finish successfully, and after then you can start installing all required third party instruments. Fongo + NoSQl-Unit By this article I’d like to show how to effectively test your Spring DATA repositories using Fongo - an in-memory implementation. I’m not going to explain how Spring Data works, you can read their documentation here Say, you have following repository package org.example.repository; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import org.startup.queue.domain.Establishment; import java.util.Optional; public interface SomethingRepository extends MongoRepository<Establishment, String> { Optional<Something> findByCol1(String col1); } Next, test it: package org.example.repository; import com.github.fakemongo.Fongo; import com.lordofthejars.nosqlunit.annotation.UsingDataSet; import com.lordofthejars.nosqlunit.core.LoadStrategyEnum; import...
If you’re interested in reducing interaction with your mouse - then use this program. Link - https://www.spectacleapp.com/
If you want easily locate your terminals - then it’s a good instrument for you
PS - it’s especially useful to move app between your physical monitors. And in case of many Desktops. I found this on their github https://github.com/eczarny/spectacle/issues/15